我尝试进行Google搜索,但由于涉及符号系统,我找不到任何相关内容。
我知道这会编译type ==>[A, B] = Map[A, B]
,但这不会type m==>[A, B] = Map[A, B]
。此外,这不会编译type =m=>[A, B] = Map[A, B]
。
另外,我知道这些是等效的def foo: Int ==> String = ???
和def foo: ==>[Int, String] = ???
。但我找不到任何指定这些规则的官方文件?在哪里指定我可以将2类型参数替换为类型别名的任何一侧?如果我有3个类型参数怎么办?如果我有这个:type ==>[A, B, C]
,我该怎么办def foo: A ==> B ==> C
?
答案 0 :(得分:2)
Scala标识符名称不能包含符号和字符的混合。这统一适用于方法以及类型和类型构造函数名称。
scala> type =m=>[A, B] = Map[A, B]
<console>:1: error: identifier expected but '=' found.
type =m=>[A, B] = Map[A, B]
^
scala> type ===>[A, B] = Map[A, B]
defined type alias $eq$eq$eq$greater
scala> type mmmm[A, B] = Map[A, B]
defined type alias mmmm
与之比较:
scala> def foo = 3
foo: Int
scala> def === = 3
$eq$eq$eq: Int
scala> def =foo= = 3
<console>:1: error: identifier expected but '=' found.
def =foo= = 3
^
唯一的例外是foo_<symbol-here>
,但这不会帮助您命名=m=>
。
scala> def foo_? = 3
foo_$qmark: Int
scala> def foo_* = 3
foo_$times: Int
scala> def foo_==> = 3
foo_$eq$eq$greater: Int