相關:How do you assign a function to a value in Scala?如何將實例方法分配給Scala中的值?
考慮:
class Foo{
def bar = println("bar")
def bat = println("bat")
}
如何創建一個fnRef
,使其指向任何Foo.bar
或Foo.bat
?
def deepFunction(foos : List[Foo], fnRef :()=>Unit) = {
foos.map(_.fnRef) //May call either bar or bat
}
獎勵:是否有可能約束fnRef所以它的Foo類內的簽名的唯一方法?
我可以看到這是如何工作的,如果在選擇'bar'或'bat'時,我手上握着所有'Foo'。但是,這不需要我的'deepFunction'來獲取List [(Foo,()=> Unit)]? – 2012-03-16 22:28:38
如果你想在它們之間進行多態選擇,那麼肯定你需要使用它們的類型並接受它們的容器。儘管你不一定需要List,但你可以例如使用可變參數或其他任何集合特徵,例如Seq,Iterable,Traversable,TraversableOnce等。 – 2012-03-18 21:51:48