scala - 如何将函数与任何输入一起使用

标签 scala types

我必须定义一个二阶​​函数,它将函数作为参数。

在我的应用程序中,输入函数可以有任何输入类型,但输出类型必须是指定的类型(假设为 Int,这并不重要)。

我定义二阶函数有:

def sof(f : (Any => Int) ) = {...}

现在,如果我有一个函数 f : Int => Int,并且我调用:

sof(f)

我得到:

 found   : Int => Int
 required: Any => Int

我想我误解了 Any 类型的含义。

我怎样才能让它发挥作用?

最佳答案

Scala 中函数的参数是逆变的。这意味着 Int => Int 不是 Any => Int 的子类型,反之亦然。想象一下以下情况:您将一个字符串传递给 Any => Int 函数(实际上是由 Int => Int 函数实现的)。 Int => Int 如何处理 String 参数?

关于scala - 如何将函数与任何输入一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28770957/

相关文章:

java - scala.Array[Long] 不符合预期类型 scala.Array[java.lang.Long]

scala - 语法规则的 def 或 val 或惰性 val ?

c - 非常长数字的数据类型

haskell - 静态强制两个对象是从同一个 (Int) "seed"创建的

linux - 显然由于 "spark-submit"参数(具有 * 通配符)未扩展,无法通过系统调用从 scala 中调用 "--jars"

Scala 向右折叠和向左折叠

scala - 为 Scala val/var/def 插入推断类型注释

Haskell 无限类型

haskell - GHCi 可以告诉我本地 Haskell 函数的类型吗?

scala - 合并特征功能的惯用方式