【问题标题】:How to define function in Scala that returns a function that itself returns a function如何在Scala中定义返回一个函数的函数,该函数本身返回一个函数
【发布时间】:2015-07-03 22:29:54
【问题描述】:

我已经定义了以下标识函数:-

def identity(n: Int) = n

现在我定义了一个函数funA,它返回这个identity函数:-

def funA(): (Int => Int) = identity

这很好用。基本上,我在这里说的是我返回的函数实际上接受Int 并返回Int

现在我想更进一步。我想定义另一个函数funB,它应该返回funA。我的问题是现在返回类型不会是(Int => Int)。与funA 不同,它返回一个接受Int 并返回Int 的函数,现在我想返回一个函数(funA),它不接受任何内容并返回一个函数而不是整数。那么如何在 Scala 中从语法上写出来呢?

【问题讨论】:

  • identityfunA 是方法,而不是函数。不清楚你想要什么。你不能返回一个方法,因为方法不是对象,你只能返回对象。

标签: scala


【解决方案1】:

funA 是返回Int => Int 的无参数方法。因此,作为一个函数,它的类型为() => (Int => Int)。如果funB 也是一个返回funA 的无参数方法,它看起来像这样:

def funB(): () => (Int => Int) = funA

如果您要进一步(无论出于何种原因),作为一个函数,funB 将具有类型

() => (() => (Int => Int)))

等等..

【讨论】:

  • 注意,Scala 中的类型签名是右关联的,这意味着在这种情况下,不需要用括号括起来。
【解决方案2】:
def funB(): (()=> Int=>Int) = funA

你不能直接写 def funB() = funA,因为这会给 funB 和 funA 相同的签名。

【讨论】:

    猜你喜欢
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 2011-05-14
    相关资源
    最近更新 更多