斯卡拉权利联合方法

我正在学习斯卡拉,并与正确的关联不适用对象玩。 我知道如果名字以':'结尾,那么它就成为正确的联想。 但是,命名似乎有一些奇怪的限制

例如这些是无效的

object cons: { def unapply(value: String): Option[(Char, List[Char])] = ??? }
object :_cons_: { def unapply(value: String): Option[(Char, List[Char])] = ??? }

这些都是有效的

object cons_: { def unapply(value: String): Option[(Char, List[Char])] = ??? }
object >>: { def unapply(value: String): Option[(Char, List[Char])] = ??? }

因此,在标识符中混合使用字母数字字符和符号似乎有些不可思议。

所以基本上,我想要一个描述性的名字,即'cons',并且仍然具有正确的结合性。 另外,我希望我的操作员在审美方面是对称的:-),所以我不太喜欢cons_:
有没有一种方法可以在不使用冒号的情况下将某些东西关联到右侧? 或者其他任何建议来实现这一目标?

:_cons_:似乎是最接近的,但由于某种原因,标识符不能以':'开头并且有字母数字


从规范(第1.1节):

有三种方法可以形成一个标识符。 首先,标识符可以以字母开头,后面可以跟随任意字母和数字序列。 这后面可以加下划线'_'字符和另一个由字母和数字或操作符组成的字符串。 其次,标识符可以以操作符字符开头,后面跟随任意的操作符字符序列。 前面两种形式被称为普通标识符。 最后,标识符也可以通过反向引号之间的任意字符串形成(主机系统可以对哪些字符串对于标识符合法化施加一些限制)。 标识符由除反引号本身之外的所有字符组成。

所以看起来你运气不好 - 如果你的标识符以a开头:它不能包含非运算符字符。 但请注意,您可以编写以下内容(不打算做任何有意义的事情 - 仅用于演示语法):

scala> class X { def `:cons:`(i: Int) = i }
defined class X

scala> val x = new X
x: X = X@6a665da6

scala> 1 `:cons:` x
res1: Int = 1

方法名仍然以冒号结尾,所以您可以获得正在寻找的正确关联性。

链接地址: http://www.djcxy.com/p/72817.html

上一篇: Scala right associative methods

下一篇: What are all the uses of an underscore in Scala?