0
更具體地說,我有:在scala中是否有類似Map.keySet的部分函數?
case class Key (key: String)
abstract class abstr {
type MethodMap = PartialFunction[Key, String => Unit]
def myMap: MethodMap // abstract
def useIt (key: Key, value: String) = {
val meth = myMap(key)
meth(value)
}
def report = {
for (key <- myMap.keySet) // how to do this
println("I support "+key)
}
}
我用這樣的:
class concrete extends abstr {
var one: Boolean
def method1(v: String): Unit = ???
def method2(v: String): Unit = ???
def map1: MethodMap = {
case Key("AAA") => method1
}
def map2: MethodMap = {
case Key("AAA") => method2
}
override def myMap: MethodMap = if (one) map1 else map2
}
當然,這是有些簡化,但報告的功能是必要的。
一些歷史記錄:我首先使用Map
實現它,但後來我將它改爲PartialFunction
以支持以下override def myMap: MethodMap = if (one) map1 else map2
。
任何建議重構我的代碼來支持一切也是讚賞。
在你的解決方案中,是否有任何方法可以將部分函數的域定義爲有限集'keys'而不是更普通的'Key'類型? – Mahdi
這個'if'和'Map'一樣好用(當然,你需要到處使用相同的類型)。編輯回答你的第二個評論。 –