Scala语法问题

时间:2011-05-25 03:47:48

标签: scala

可以编译以下代码

  def isEven(a:Int)=
    if (a%2==0) true else false

  def main(args: Array[String]) {
        List(1, 10) filter isEven foreach println

但如果我改为以下(列表(1,10) - >列表(1到10))

def isEven(a:Int)=
    if (a%2==0) true else false

  def main(args: Array[String]) {
        List(1 to 10) filter isEven foreach println
   }

List(1,10)和List(1到10)之间有什么区别?

3 个答案:

答案 0 :(得分:5)

List(1, 2)只是一个包含两个Int元素的列表:1和2.表达式1 to 10创建一个Range实例,因此List(1 to 10)是一个列表使用一个元素:Range

答案 1 :(得分:3)

List(1, 10)List[Int]List(1 to 10)List[Range]。观察以下REPL会话中的类型:

scala> 1 to 10
res3: scala.collection.immutable.Range.Inclusive with scala.collection.immutable.Range.ByOne = Range(1, 2, 3, 4, 5, 6, 7
, 8, 9, 10)

scala> List(1 to 10)
res4: List[scala.collection.immutable.Range.Inclusive with scala.collection.immutable.Range.ByOne] = List(Range(1, 2, 3,
 4, 5, 6, 7, 8, 9, 10))

scala> List(1, 10)
res5: List[Int] = List(1, 10)

答案 2 :(得分:3)

missingfaktor是对的,所以这只是一个补充。

如果您希望List[Int]的数字从1到10,您可以写

List(1 to 10:_*)

1 to 10 toList