gpt4 book ai didi

scala - 如何将方法放入集合中?

转载 作者:行者123 更新时间:2023-12-04 07:09:42 24 4
gpt4 key购买 nike

def m(x: Int): Any = { }
var set = new HashSet[Int => Any]
set += m
set += m
set.size现在是 2,并且 set.contains(m)是假的,因为显然 m部分应用两次并创建了两个函数对象。如 m是一个函数,它按预期工作。如果函数引用相同的方法,我想将它们视为相等。这能做到吗? (无需转向带有键返回的映射以进行删除,或传递其他中间变量)

最佳答案

使用 val fun = m _在添加之前将方法转换为函数。

set += m隐式创建一个新函数,该函数不等于执行 set.contains(m) 时创建的函数,例如m 的两种用途在函数上下文中创建一个全新的因此不同的函数对象。 (对不起,我刚看到,你已经说过了。)

这没关系,如果您只需要以某种方式将方法放入集合中,然后将集合用于所有引用。所以以下也有效:

def m(x: Int): Any = { }
var set = new HashSet[Int => Any]
set += m
val fun = set.head // should not use head in real code but an iterator
set.contains(fun)

添加 :

or passing around other intermediate variables



Scala 中没有方法对象这样的东西。因此,除非您比较它们的名称,否则我认为无法比较两种方法。 (可能可以使用反射,但我不确定这一点,而且这样做也很糟糕——你不会有一组函数,但是你需要转换为正确的方法的方法引用然后再回来。)

关于scala - 如何将方法放入集合中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6571016/

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