由于type
是保留字,因此在将其用作标识符时会附加下划线。 (我找不到关于此的风格推荐。)
val type_ = "abc"
但后来我用它作为参数标识符。
def f(id: String, type_: String, typeName: String) = Map(
"id" -> id,
"type" -> type_,
"typeName" -> typeName
)
println(f("a", "simple", "test"))
但是我收到了错误
error: identifier expected but 'type' found.
def f(type: String) = 1
在type_
和:
之间加一个空格可以修复它
def f(id: String, type_ : String, typeName: String)
虽然这与the recommended Scala style相反。
这是Scala编译器中的错误吗?我还没能找到Scala语法的任何语法,所以我无法确定。
答案 0 :(得分:2)
在scala中,变量名中的_
专门用于表示所有以下字符都是变量名称的一部分,直到空格为止。所以在你的情况下type_
是一个很好的变量名,但当你把它放在一个方法签名type_:
时,它会将冒号推断为变量名的一部分,因为它之间没有空格。冒号和下划线。有关详细信息,请参阅Programming Scala的第54页。
从书中解释,他们这样做的原因是你可以做xyz_++=
之类的事情作为变量或方法名称,因为xyz++=
将被作为运算符xyz ++=
进行交织。 / p>
答案 1 :(得分:1)
当您撰写type_:
时,它认为type_:
是变量的名称,而不是认为type_
是变量名称而:
是一个单独的东西。这是一个简单的例子:
scala> val x_: = 2
x_:: Int = 2
scala> x_:
res0: Int = 2
scala> x_: + 3
res1: Int = 5
将空格放在那里告诉编译器:
不是变量名的一部分。
所以:要么保留空间,要么转储下划线。