Scala:为什么我的函数无法打印字符串参数?

时间:2015-10-14 23:09:35

标签: scala

假设我有一个带一个参数的函数。

def weird(nothing: Unit): Unit = {
  println(nothing)
}

weird("Print me!")

当我将一个字符串传递给该函数时,它会打印()。为什么会这样?

为什么UnitString相同?

2 个答案:

答案 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
  

将对象打印到默认输出,然后输出换行符   字符。