scala中的部分函数是否有类似Map.keySet的内容?
更具体地说,我有:scala中的部分函数是否有类似Map.keySet的内容?,scala,dictionary,partialfunction,Scala,Dictionary,Partialfunction,更具体地说,我有: 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) } d
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)
}
}
当然,这有点简化,但是报告功能是必需的
一些历史记录:我首先使用Map
实现它,但后来我将其更改为PartialFunction
,以支持以下覆盖def myMap:MethodMap=if(one)map1 else map2
任何重构我的代码以支持一切的建议都将受到欢迎。否。
部分函数可以在无限集上定义(通常是)。例如,在这些情况下,您希望报告
返回什么:
class concrete2 extends abstr {
def myMap = { case Key(_) => ??? }
}
或
??如果您有一个感兴趣的值的有限列表,您可以这样做
abstract class abstr {
type MethodMap = PartialFunction[Key, String => Unit]
def myMap: MethodMap // abstract
val keys: Seq[Key] = ...
def report = {
for (key <- keys if myMap.isDefined(key))
println("I support "+key)
}
}
当然,域不是类型的一部分。否。PartialFunction
可以在无限集上定义(通常是)。例如,在这些情况下,您希望报告
返回什么:
class concrete2 extends abstr {
def myMap = { case Key(_) => ??? }
}
或
??如果您有一个感兴趣的值的有限列表,您可以这样做
abstract class abstr {
type MethodMap = PartialFunction[Key, String => Unit]
def myMap: MethodMap // abstract
val keys: Seq[Key] = ...
def report = {
for (key <- keys if myMap.isDefined(key))
println("I support "+key)
}
}
当然,域不是该类型的一部分。在您的解决方案中,是否有任何方法将部分函数的域定义为有限集键,而不是更一般的类型键?并且该if
将与映射同样有效(当然,您需要在任何地方使用相同的类型)。编辑以回答您的第二条评论。在您的解决方案中,是否有任何方法将分部函数的域定义为有限集键,而不是更一般的类型键?并且此if
将同样适用于映射(当然,您需要在任何地方使用相同的类型)。编辑以回答您的第二条评论。
def f: MethodMap = { case key if keys.contains(key) => ... }