我在List上有一个基本问题
当我尝试使用cons运算符创建List时,我收到以下错误
scala> val someList = 1::2
<console>:10: error: value :: is not a member of Int
val someList = 1::2
^
Run Code Online (Sandbox Code Playgroud)
但是如果你看下面的话,一旦我添加了Nil,它就会起作用..
scala> val someList = 1::2::Nil
someList: List[Int] = List(1, 2)
Run Code Online (Sandbox Code Playgroud)
我想知道为什么在创建列表时至少需要Nil一次
Nil是数据类型吗?还是空元素?
the*_*eye 12
正是因为这个原因.
value ::不是Int的成员
在Scala中,运算符实际上是对象的函数.在这种情况下,::是Nil对象上的函数,它实际上是一个空列表对象.
scala> Nil
res0: scala.collection.immutable.Nil.type = List()
Run Code Online (Sandbox Code Playgroud)
当你这样做时1::2,Scala会查找名为::on 的函数2,但它找不到它.这就是它失败的原因.
注意:在Scala中,如果运算符的最后一个字符不是冒号,则在第一个操作数上调用运算符.例如,1 + 2基本上是1.+(2).但是,如果最后一个字符是冒号,则在右侧操作数上调用该运算符.所以在这种情况下,1 :: Nil实际上是Nil.::(1).因为,::返回另一个列表对象,你可以链接它,就像这样1 :: 2 :: Nil,Nil.::(2).::(1).
名称以其结尾的中缀运算符:被解释为右操作数上的方法调用.所以1 :: 2IS 2.::(1),即它调用的方法::上2.同样1 :: 2 :: Nil是Nil.::(2).::(1).
第一个不起作用的原因2是a Int和Ints没有::方法.第二个工作的原因Nil是列表和列表确实有一个::方法.而且由于结果List.::也是一个列表,你仍然可以调用::第一个结果::.
| 归档时间: |
|
| 查看次数: |
2443 次 |
| 最近记录: |