假设有一个通用方法声明,它基于指定模式执行一组操作,如下所示:
def doSomethingSmart(mode: OpMode, someGoodyList: List[Any]): Boolean = { /* do foo */ }
其中 OpMode 是一个类型/枚举,包括:
- 读
- 创造
- 删除
- 调整
- 任何
将两者放在一起显然会产生一个单模式、可重用的代码块。
现在,类型/枚举部分可能看起来像这样:
object OpMode extends Enumeration {
type OpMode = Value
val Read, Write, Create, Modify, Delete, Whatever = Value
}
但是,假设您想扩展 doSomethingSmart() 的范围以涵盖通常使用按位运算符完成的工作,例如:Create & Modify & What。是否存在将位掩码参数限制为该有限数据集(即枚举/类型)的“scala 方式”。也许是这样的:
def doSomethingSmarter(more: T < [BitwiseSelectionOf[OpMode]], ...
或者,最好简单地退回到二进制索引值分配 - 在这种情况下,本身没有“类型”检查?
TIA。
编辑:我想另一种可能性是将 OpMode 更改为 List ,然后运行一系列“包含”操作。
编辑 2:特别是,我正在寻找一种有效的机制,在调用 doSomethingSmarter() 时提供内联结构