假设我有一个带一个参数的函数。
def weird(nothing: Unit): Unit = {
println(nothing)
}
weird("Print me!")
当我将一个字符串传递给该函数时,它会打印()
。为什么会这样?
为什么Unit
与String
相同?
答案 0 :(得分:4)
提供单位价值,"丢弃"你的字符串值。
scala> ("hi": Unit)
<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
("hi": Unit)
^
scala> :replay -Ywarn-value-discard
Replaying: ("hi": Unit)
<console>:11: warning: discarded non-Unit value
("hi": Unit)
^
<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
("hi": Unit)
^
查看转化constructor, which was defined in the cpp
file。
这只是一种使你的表达适应预期类型的方法。
通常看起来像:
def f: Unit = 42 // add () here
您的电话实际上是
weird { "string" ; () }
答案 1 :(得分:2)
单位与字符串不同。
Unit定义:
只有一个类型为Unit,()的值,并且不表示 底层运行时系统中的任何对象。一种返回类型的方法 Unit类似于声明为void的Java方法。
因此,您的函数基本上丢弃了作为参数传递的字符串,并且它打印了Unit值(),作为转换规范的一部分。
额外信息:
检查println
的{{3}}:
def println(x: Any): Unit
将对象打印到默认输出,然后输出换行符 字符。