より具体的には、私は持っています:
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
すべてをサポートするためにコードをリファクタリングするという提案も大歓迎です。