[随笔] scala每周一题
coollzh
2010-11-27
def isEven(n: Int) = (n % 2) == 0
List(1, 2, 3, 4) filter isEven foreach println 第二句代码是用了scala的语法糖,请问用完整的常规语法该怎么写? |
|
night_stalker
2010-11-28
这个东西是有陷阱的……
List(1,2,3,4) filter isEven foreach println // 上一行为偶数个元素而且没隔空行,可以连起来 List(1,2,3,4) filter isEven foreach println // 多空了一行,连不起来 List(1,2,3,4) filter isEven foreach println // 上一行为奇数个,连不起来 |
|
coollzh
2010-11-28
这是为什么呢?
换行的话应该是一条独立的语句吧。 |
|
buptwhisper
2010-12-02
大约是
List(1, 2, 3, 4).filter(isEven(_)).foreach(println(_)) 看看api了解一下 |
|
buptwhisper
2010-12-02
对于函数,如果它有0个或1个参数,可以用" "替换".",(arg)也可以替换成" arg"
|
|
llh110220
2010-12-03
buptwhisper 写道 大约是
List(1, 2, 3, 4).filter(isEven(_)).foreach(println(_)) 看看api了解一下 就是这样地 |
|
itang
2010-12-03
主要是Partially applied function的应用:
“method _ ”或带括号"method(_)" 形式Scala会将method 转换为对应的Function对象. 如果此method出现在了本应是Function的地方, 这时 "_" 都可以省略. 如: scala> def isEven(n: Int) = (n % 2) == 0 isEven: (n: Int)Boolean scala> isEven _ res0: (Int) => Boolean = <function1> //(注意到isEven _表达式值为Function1类型了) scala> isEven(_) res1: (Int) => Boolean = <function1> scala> Array(1,2,3).map(String.valueOf) //类方法 res2: Array[java.lang.String] = Array(1, 2, 3) 那么以下形式都是合法的: List(1, 2, 3, 4).filter{ (x:Int) => isEven(x)}.foreach{ (it:Int) => println(it)} List(1, 2, 3, 4).filter{ x:Int => isEven(x)}.foreach{it:Int => println(it)} List(1, 2, 3, 4).filter{ x => isEven(x)}.foreach{it => println(it)} List(1, 2, 3, 4).filter(isEven _ ).foreach{ println _} List(1, 2, 3, 4).filter(isEven).foreach(println) 包括楼主写的 List(1, 2, 3, 4) filter isEven foreach println (method as operator形式) |
|
willothe
2010-12-07
这样子一段代码会遍历多少次呢
|