为什么称为明显的cons函数适用于Scala中的Int?

rsa*_*san 2 scala cons

您可以使用以下方法在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自动强制转换为12Int不同的类型.那是对的吗?如果是,为什么会发生这种奇怪的类型?

dhg*_*dhg 6

这很好笑.

你的表达

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)

  • `1.`在2.10中被弃用,将在2.11中删除. (5认同)
  • 这不是一个错误.这是完全有效的表达.当你遗漏空间时,它看起来有点滑稽. (2认同)