gpt4 book ai didi

scala - 为什么 currying 和 uncurrying 不隐含在 scala 中

转载 作者:行者123 更新时间:2023-12-03 23:31:09 26 4
gpt4 key购买 nike

如果我有一个功能:

f : A => B => C

我可以定义一个隐式转换,这样就可以在函数 (A, B) => C 的地方使用它。是期待。这也朝着另一个方向发展。

为什么这些转换不是隐式的(或隐式可用的)?我假设 坏事可能会发生为某些坏事的值(value)。这是什么值(value)?

最佳答案

我不认为会发生什么不好的事情。转换是完全明确的。最坏的情况是,Scala 将无法确定隐式转换是否适用。

implicit def curryImplicitly[A,B,C](f: (A, B) => C) =
(a: A) => (b: B) => f(a, b)
implicit def uncurryImplicitly[A,B,C](f: A => B => C) =
(a: A, b: B) => f(a)(b)

再说一次,这些也会有帮助。
implicit def flipImplicitly[A,B,C](f: (A, B) => C) =
(b: B, a: A) => f(a, b)
implicit def flipImplicitlyCurried[A,B,C](f: A => B => C) =
(b: B) => (a: A) => f(a)(b)

但这些不是可传递的,所以你需要这些:
implicit def flipAndCurry[A,B,C](f: (A, B) => C) =
(b: B) => (a: A) => f(a, b)
implicit def flipAndUncurry[A,B,C](f: A => B => C) =
(b: B, a: A) => f(a)(b)

但现在转换是模棱两可的。所以并不是所有的玫瑰。

让我们知道它在实践中是如何运作的。您可能需要 Function3、Function4 等的等效项。

关于scala - 为什么 currying 和 uncurrying 不隐含在 scala 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3457934/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com