Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala极限函数参数可能的类型_Scala_Types - Fatal编程技术网

Scala极限函数参数可能的类型

Scala极限函数参数可能的类型,scala,types,Scala,Types,我有一个函数,它接受的参数可以是Int、Long类型,也可以是除Unit之外的AnyVal的任何子类,也可以是字符串。我想明确指定,您只能将其中一种类型的值作为参数。我可以简单地说,但它不会限制任何东西。 Scala中是否有提供这种可能性的概念或特性?如果不是,你将如何管理? 现在,如果类型不兼容,我只是简单地管理函数中发生的任何异常 没有代码真正显示: def myFunction(param: Any) = {...} 当需要复杂类型限制时,通常的表达方式是需要密封类型的隐式帮助器: se

我有一个函数,它接受的参数可以是Int、Long类型,也可以是除Unit之外的AnyVal的任何子类,也可以是字符串。我想明确指定,您只能将其中一种类型的值作为参数。我可以简单地说,但它不会限制任何东西。 Scala中是否有提供这种可能性的概念或特性?如果不是,你将如何管理? 现在,如果类型不兼容,我只是简单地管理函数中发生的任何异常

没有代码真正显示:

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……您在函数内部做什么?你如何区分不同的类型?这个解决方案可能也很有帮助:对我来说似乎很好,如果没有人建议对我来说更好的东西,我会接受这个答案: