gpt4 book ai didi

scala - scala 中的::::和::::.() 之间有什么区别

转载 作者:行者123 更新时间:2023-12-02 02:02:39 25 4
gpt4 key购买 nike

在 Scala 列表类中显示:

列表(1, 2)::::列表(3, 4) = 列表(3, 4).::::(列表(1, 2)) = 列表(1, 2, 3, 4 )。不应该:

列表(1,2)::::列表(3,4) = 列表(1,2).::::(列表(3,4)) = 列表(3,4,1,2 )

(方法 ::: 为列表添加前缀)

最佳答案

来自docs :

def :::(prefix: List[A]): List[A]

[用例]在此列表前面添加给定列表的元素。

例子:

List(1, 2) ::: List(3, 4) = List(3, 4).:::(List(1, 2)) = List(1, 2, 3, 4)

在 Scala 中,以 : 结尾的运算符是右结合的,调用对象出现在运算符的右侧。因为它是右结合的,所以 prefix 方法将在“向右”的对象上调用,即 List(3, 4)

然后它会按照它的名字做事,它会在 List(3, 4) 前面加上 List(1, 2),这就是为什么你得到 列表(1, 2, 3 ,4)。这不是世界上最直观的事情,但它是这样的:

a ::: b
// ending in :, so flip the argument order, call the method on b.
b .:: a // :: = prefix b with a
result = a(concatenated) with b

现在让我们看看右边:

List(3, 4).:::(List(1, 2))

. 点正在执行 ::: 前缀调用的反转,因此它会在执行之前简单地反转两个 List 对象::: 前缀操作。

List(3, 4).:::(List(1,2)) = List(1, 2) ::: List(3, 4) // exactly as the above.
// and now you it's the same story.

. 点是反转关联运算符的简单方法。 a::: b 等同于 b .:::a

关于scala - scala 中的::::和::::.() 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16443265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com