当试图回答这个问题时:在函数文字中省略下划线我试图编写一个例子,我遇到了一个奇怪的行为.
scala> val myList = 1::2::Nil
myList: List[Int] = List(1, 2)
scala> def concat:(List[Int]=> List[Int]) = myList:::
concat: (List[Int]) => List[Int]
scala> concat(3::Nil)
res1: List[Int] = List(3, 1, 2)
Run Code Online (Sandbox Code Playgroud)
虽然我在使用_或x=> f(x)语法时有很好的答案.
scala> def concat0:(List[Int]=> List[Int]) = x=> myList:::x
concat0: (List[Int]) => List[Int]
scala> def concat1:(List[Int]=> List[Int]) = myList::: _
concat1: (List[Int]) => List[Int]
scala> concat0(3::Nil)
res2: List[Int] = List(1, 2, 3)
scala> concat1(3::Nil)
res3: List[Int] = List(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
有没有为什么合理的解释myList后,来到3::Nil在功能concat?
myList ::: _转换为_.:::(myList),而myList :::转换为myList.:::(_).
TL;博士
这篇文章详细介绍了正确的关联方法.这里发生的事情是:
def concat0:(List[Int]=> List[Int]) = x=> myList:::x
List[Int]List有一个:::方法x.:::(myList)前所未有myList的x.myList 如果是类型 List[Int]:::,所以没有权利相关性myList和:::myList.:::是相同的x => myList.:::(x),其预先考虑x到myList.| 归档时间: |
|
| 查看次数: |
245 次 |
| 最近记录: |