我有一个函数,它可以是一个参数,可以是Int,Long或AnyVal的任何子类,除了Unit,它也可以是一个String.我想明确指出你只能将其中一种类型的值作为参数.我可以简单地把Any,但它不会限制任何东西.Scala中是否有提供这种可能性的概念或功能?如果不是,你会如何管理?现在,如果类型不兼容,我只是简单地管理函数中发生的任何异常.
没有代码可以显示:
def myFunction(param: Any) = {...}
Run Code Online (Sandbox Code Playgroud)
当你想要一个复杂的类型限制时,通常的表达方式是要求一个密封类型的隐式帮助器:
sealed trait Helper[T]
object Helper {
implicit object IntHelper extends Helper[Int] {...}
implicit object StringHelper extends Helper[String] {...}
...
}
def myFunction[T: Helper](t: T) = ...
Run Code Online (Sandbox Code Playgroud)
这种方式myFunction只能T为您定义的方法调用Helper,并且您可以使用"递归隐含"(带隐式参数的隐式函数)表达更复杂的约束.
您还可以将函数实现的类型特定情况放在Helper对象中,而不是匹配函数中的大小写,使一切更加类型安全.
| 归档时间: |
|
| 查看次数: |
1333 次 |
| 最近记录: |