def m(x: Int): Any = { }
var set = new HashSet[Int => Any]
set += m
set += m
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
增加:
或传递其他中间变量
Scala中没有方法对象这样的东西.所以除非你比较他们的名字,否则我认为不可能比较两种方法.(可能可以使用反射,但我不确定这一点,并且它也会非常讨厌 - 你不会有一组函数,但是你需要转换为正确的方法的方法引用又回来了.)
| 归档时间: |
|
| 查看次数: |
166 次 |
| 最近记录: |