Scala List.prepend(:)中的操作数顺序
Odersky出色地优化了Java语法,支持不带点和括号的对象调用。也就是说,您现在只需编写Scala List.prepend(:)中的操作数顺序,list,scala,operators,List,Scala,Operators,Odersky出色地优化了Java语法,支持不带点和括号的对象调用。也就是说,您现在只需编写list::item,而不是list.prepend(item),这也将语言运算符转换为简单的对象方法。在这里,列表定义了::(前置)运算符。但是,您通常使用Scala编写它,使用item::list。它建议每个(列表)类型都定义::(List)操作符,这令人难以置信。如何实现操作数反转?我无法从源代码中找到它 class List[+A] extends AbstractSeq[A] def ::[
list::item
,而不是list.prepend(item)
,这也将语言运算符转换为简单的对象方法。在这里,列表定义了::
(前置)运算符。但是,您通常使用Scala编写它,使用item::list
。它建议每个(列表)类型都定义::(List)
操作符,这令人难以置信。如何实现操作数反转?我无法从源代码中找到它
class List[+A] extends AbstractSeq[A]
def ::[B >: A] (x: B): List[B] =
new scala.collection.immutable.::(x, this)
似乎::(val head,val tail)也代表类型名。但它无论如何都不适合
head::tail
模式。任何右侧带有:
的运算符的操作数都会翻转。还有其他的操作符也利用了这个(但我想不出任何例子) 任何右边带有:
的运算符的操作数都会翻转。还有其他的操作符也利用了这个(但我想不出任何例子) 根据你的信息,我找到了。谢谢。@recognizeevilaswastenp。想到Scala真是太好了。我想念你的信息,我已经找到了。谢谢。@recognizeevilaswastenp。想到Scala真是太好了。我想念它:/:
是Scala的“cons”,非空列表,对应于Nil
。请注意,您也可以对二进制类型构造函数使用中缀符号-将泛型类型视为生成结果类型的“类型函数”:type\/[+a,+B]=a,B]
然后def foo:String\/Int=?
:是Scala的“cons”,非空列表,与Nil
相对应。请注意,您也可以对二进制类型构造函数使用中缀符号-将泛型类型视为生成结果类型的“类型函数”:type\/[+a,+B]=a,B]
然后def foo:String\/Int=?
。