Scala和Java的互操作
最近在实践中遇到一些Scala和Java互操作的问题,记录一下
BTW: gist + wordpress的gist插件各种好使啊 果断抛弃各种syntax highlighter插件
Scala Map Java Map
下面代码是两个隐式转换,用于在两者之间互转
Scala repeated parameters Java varargs
不好好看书就急着动手的杯具……纠结了很久才知道如何正确调用可变参数列表的Java方法
如果不使用: _*这个annotation告诉scala我要展开成varargs,不论你如果toArray如果反射new出Object数组都是没有用的,整个Array或者List会被作为一个Object传入,而不是展开成多个参数传入调用方法
来scala下Scala
Scala,所谓可伸缩可扩展,于是就蛋疼试试
首先因为scala的语句块都可以返回值,因此if else完全可以取代?:三元运算符的作用,不过写起来还是后者比较爽。那就自己扩展一把好了。
class BooleanEx(b: Boolean) {
def ?[T](func: Boolean => T) = {
func(b)
}
}
class AnyEx[T](o: T) {
def or(o1: T) = { b: Boolean =>
if (b) {
o
} else {
o1
}
}
}
object Helper {
implicit def Boolean2BooleanEx(b: Boolean) = new BooleanEx(b)
implicit def Any2AnyEx[T](o: T) = new AnyEx(o)
def main(args: Array[String]) {
(1 == 1) ? (true or false)
}
}
无奈的地方是没法使用冒号作为方法名(因为是关键字),以及?属于最高优先级层,所以后面的括号省略不能……
资料收集[置顶]
在这边放一些有用的资料索引,方便自用,慢慢收集整理了
git入门推荐,中文的哦
http://progit.org/book/zh/
twitter的scala教程
http://twitter.github.com/scala_school/index.html
stackoverflow的scala tag
http://stackoverflow.com/tags/scala/info
markdown语法
http://daringfireball.net/projects/markdown/syntax
呜喵王推倒达成
最近WOW国服+台服双线进行中。台服小战士85一身蓝绿环保人见人嫌排随机,国服小DK偶尔上线参加下活动。话说DK所在的10人固定团因为人员不太稳定,一直在各种便当,虽然开3.3第二个CD就见呜喵王了但却到昨天才成功推倒。想我的60、70年代都在各种AFK中渡过,终于参与开荒了80年代最终BOSS的我内牛满面。只是呜喵王的战斗虽然是我遇过的最复杂的(完全坑爹啊,0容错还得看脸),但是没有与之相衬的史诗感,总觉得没过瘾啊……
最近败了个台式机以及360就是贱啊
唔~顶不住诱惑败了个台式机。AMD羿龙IIX4 955、技嘉770T-UD3P、迪兰恒进HD6850~可以特效全开SC2的感觉太感动了……
但是买来后发现机箱中某风扇动静很大,开始以为是电源的……后来拆开按住CPU风扇发现不响了。好嘛,自带风扇果然不靠谱啊,看来又得出血败个风扇了。
然后为了看看CPU、显卡温度啥的,就去找来EVEREST,结果发现识别不到我的显卡,于是想起一个叫撸大湿的东西。放狗打开撸大湿主页,360旗下产品几个大字让我一下就缩卵了。事实证明这货果然是360的产品,安装后有一个bundle.exe偷偷的在我用户目录的temp目录下跑,打开看签名:Chengdu Qiying Technology Co. Ltd~没错,就是撸大湿的公司。先不管这东西是干嘛的,它偷偷摸摸跑在我temp目录下就可见用心不良,于是果断终止删掉然后卸载撸大湿。
btw:AIDA64,这个貌似就是EVEREST。原EVEREST已经不更新了,改这个名字了。
速成WOW插件DEBUG-[CWLK-3.3.5-Runevolution]
最近在WOW,国服终于开ICC了嘛,怎么也得去见阿傻子一面。10人团已经开到小阿面前,作为一个DPS DK,深感和上一版本的差距,于是从邪血二天一洗成双持传染冰。但这鸟天赋打起来实在太累人,于是就开始寻觅一个符文+疾病+buff的监控插件。还真被我找到个合适的,名字就叫~当当当当~Runevolution。
=== 以上都是废话 ===
这插件有个问题……第一次进是OK的,退出游戏再进后就各种报错,各种google无果之后决定自助解决……毕竟我还是个码农的嘛。
于是先看报错日志,接着翻插件代码,看配置文件,查API。最后终于被我发现Orz的作者把父框体结构直接存入了配置文件,而实际上只应该存放父框体的名字就好了……于是妥妥的加上:GetName()就妥妥的好了,起码看上去是好了,因为咱是速成的所以也不知道有没有后遗症。
总之附件在此,送给Google。Runevolution-3.3.5
原来身份证号是可以自我验证的
在Google Reader上别人share的文章看到的,二代身份证号码可以通过一种机制去验真。同样道理的也可以基于这种方式生成伪造的身份证号码,只不过也只能逃过本地验证,联网验证肯定还是死翘翘的。
蛋疼Groovy练手一段:
id = "787416969231782985"
factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] as int[]
results = [1, 0, "x", 9, 8, 7, 6, 5, 4, 3, 2] as String[]
sum = 0
factors.eachWithIndex { factor, i ->
sum += (id[i] as int) * factor
}
id[17].toLowerCase() == results[sum%11]
各位如果和我一样蛋疼的也可以把id换成自己的身份证号码run一下看看是不是正确。另外附上同样蛋疼的生成脚本一段:
id = ""
factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] as int[]
results = [1, 0, "x", 9, 8, 7, 6, 5, 4, 3, 2] as String[]
sum = 0
random = new Random()
factors.each {
ide = random.nextInt(10)
id += ide
sum += ide * it
}
id += results[sum%11]
Project Lombok给力的new feature
唔 刚SJ同学推荐了下Project Lombok的新特性,看了下果然V5啊,从此可以和那些乱七八糟的类型声明说byebye了(虽然只是某种程度上)……
简单来说呢 就是用了Lombok后腰不酸腿不疼走路也有劲了我们就有了val,可以像这样:
val map = new HashMap<String, Object>(); // 这东西等效于这样 final HashMap<String, Object> map = new HashMap<String, Object>();
看上去就像scala类型推断似的!但其实没那么强……只能推断你的初始化表达式的类型,而且现在只支持local variable和for each loop中的声明。
真相在这里->Project Lombok,对IDE的支持现在是eclipse和netbeans(with bugs),以及构建时对maven的支持。
BTW:0.9.3的stable包里没有val,在0.10.0-逼她2这个perview包里
