Scala极限函数参数可能的类型
我有一个函数,它接受的参数可以是Int、Long类型,也可以是除Unit之外的AnyVal的任何子类,也可以是字符串。我想明确指定,您只能将其中一种类型的值作为参数。我可以简单地说,但它不会限制任何东西。 Scala中是否有提供这种可能性的概念或特性?如果不是,你将如何管理? 现在,如果类型不兼容,我只是简单地管理函数中发生的任何异常 没有代码真正显示:Scala极限函数参数可能的类型,scala,types,Scala,Types,我有一个函数,它接受的参数可以是Int、Long类型,也可以是除Unit之外的AnyVal的任何子类,也可以是字符串。我想明确指定,您只能将其中一种类型的值作为参数。我可以简单地说,但它不会限制任何东西。 Scala中是否有提供这种可能性的概念或特性?如果不是,你将如何管理? 现在,如果类型不兼容,我只是简单地管理函数中发生的任何异常 没有代码真正显示: def myFunction(param: Any) = {...} 当需要复杂类型限制时,通常的表达方式是需要密封类型的隐式帮助器: se
def myFunction(param: Any) = {...}
当需要复杂类型限制时,通常的表达方式是需要密封类型的隐式帮助器:
sealed trait Helper[T]
object Helper {
implicit object IntHelper extends Helper[Int] {...}
implicit object StringHelper extends Helper[String] {...}
...
}
def myFunction[T: Helper](t: T) = ...
这样,myFunction只能为已经定义了帮助器的T调用,并且可以使用递归隐式表达式来表示更复杂的约束—它的隐式函数带有隐式参数
您还可以将函数实现的特定于类型的事例放在Helper对象中,而不是在函数中匹配事例,从而使一切都更加类型安全 您可以使用类型类来执行此操作:
trait CanUse[T]
object CanUse[T] {
implicit object canUseInt extends CanUse[Int]
implicit object canUseString extends CanUse[String]
// etc.
}
def myFunction[T : CanUse](x: T) = { ... }
myFunction处的符号是语法糖,用于:
def myFunction[T](x: T)(implicit ev: CanUse[T]) = { ... }
因此,您可以看到隐式canUse对象实际上被传递给了函数。因此,您可以向它们添加方法并实现特定于类型的行为。您还想允许值类吗?另外,请发布您已有的代码,以便我们更好地理解。我只想允许一些特定类型,其中包括Int、Long、String……您在函数内部做什么?你如何区分不同的类型?这个解决方案可能也很有帮助:对我来说似乎很好,如果没有人建议对我来说更好的东西,我会接受这个答案: