您可以使用以下方法在Scala中创建新列表:
1 :: 2 :: Nil
Run Code Online (Sandbox Code Playgroud)
根据我的理解,这可以改写为:
Nil.::(2.::(1))
Run Code Online (Sandbox Code Playgroud)
主要是因为:: fixty但是如果我写:
Nil :: 1 :: 2
Run Code Online (Sandbox Code Playgroud)
我得到"值::不是Int的成员"什么是完全预期的,因为在scaladoc Int中没有::,但我无法理解为什么如果我将其转换为:
1.::(2.::(Nil))
Run Code Online (Sandbox Code Playgroud)
它可以作为输出:
List(1.0, 2.0)
Run Code Online (Sandbox Code Playgroud)
它看起来像scalac自动强制转换为1与2Int不同的类型.那是对的吗?如果是,为什么会发生这种奇怪的类型?
这很好笑.
你的表达
1.::(2.::(Nil))
Run Code Online (Sandbox Code Playgroud)
正在被编译器解析为
1. :: (2. :: (Nil))
Run Code Online (Sandbox Code Playgroud)
因为::是右关联的,所以它是相同的
1. :: 2. :: Nil
Run Code Online (Sandbox Code Playgroud)
这1.是一种有效的写作方式Double,与...相同
1.0 :: 2.0 :: Nil
Run Code Online (Sandbox Code Playgroud)
这是建构的法律表达 List[Double]
List(1.0, 2.0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |