Scala类型别名命名规则?

时间:2014-04-27 23:52:42

标签: scala naming type-alias

我尝试进行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

1 个答案:

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