Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala List.prepend(:)中的操作数顺序_List_Scala_Operators - Fatal编程技术网

Scala List.prepend(:)中的操作数顺序

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 ::[

Odersky出色地优化了Java语法,支持不带点和括号的对象调用。也就是说,您现在只需编写
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=?