Since type is a reserved word, I append an underscore when using it as an identifier. (I can find no style recommendation about this.)
val type_ = "abc"
But then I used it as an argument identifier.
def f(id: String, type_: String, typeName: String) = Map(
"id" -> id,
"type" -> type_,
"typeName" -> typeName
)
println(f("a", "simple", "test"))
But I get an error
error: identifier expected but 'type' found.
def f(type: String) = 1
Putting a space between type_ and : fixes it
def f(id: String, type_ : String, typeName: String)
though this goes against the recommended Scala style.
Is this a bug in the Scala compiler? I haven't been able to find any sort of grammar for Scala syntax, so I can't be sure.
In scala the
_in variable names is specifically used to denote that all of the following characters are part of the variable name up until a white space. So in your casetype_is a fine variable name, but when you put it in a method signaturetype_:it infers the colon as part of the variable name since there's no white space between the colon and underscore. For more detail you can see page 54 of Programming Scala.Paraphrased from the book, the reason they did this is so you can do things like
xyz_++=as a variable or method name sincexyz++=would be interperepted as the operatorxyz ++=.