如何在 Scala 中组合柯里化函数
How to compose curried functions in Scala
是否可以在 Scala 中组合柯里化的函数?例如:
def a(s1: String)(s2: String): Int = s1.length + s2.length
def b(n: Int): Boolean = n % 2 == 0
def x : String => String => Boolean = a andThen b
x("blabla")("foo")
编辑:
我在 Haskell 中找到了一种方法:
a :: String -> String -> Int
a s1 s2 = length s1 + length s2
b :: Int -> Bool
b n = mod n 2 == 0
c :: String -> String -> Bool
c = curry (b . (uncurry a))
这应该有效:
def x = a _ andThen (_ andThen b)
第一个_
避免调用a
并将其变成函数值。此值的类型为 String=>String=>Int
,即采用 String
和 returns String=>Int
.
的函数
andThen
方法的参数是一个函数,它获取原始函数的结果并对其进行修改。所以在这种情况下,它需要一个接受 String=>Int
和 returns 新值的函数,一个函数 String=>Boolean
。我们可以通过在原始函数上使用 andThen
来构造这个新函数。这将获取 a
的结果并将其与新函数 b
.
组合
是否可以在 Scala 中组合柯里化的函数?例如:
def a(s1: String)(s2: String): Int = s1.length + s2.length
def b(n: Int): Boolean = n % 2 == 0
def x : String => String => Boolean = a andThen b
x("blabla")("foo")
编辑:
我在 Haskell 中找到了一种方法:
a :: String -> String -> Int
a s1 s2 = length s1 + length s2
b :: Int -> Bool
b n = mod n 2 == 0
c :: String -> String -> Bool
c = curry (b . (uncurry a))
这应该有效:
def x = a _ andThen (_ andThen b)
第一个_
避免调用a
并将其变成函数值。此值的类型为 String=>String=>Int
,即采用 String
和 returns String=>Int
.
andThen
方法的参数是一个函数,它获取原始函数的结果并对其进行修改。所以在这种情况下,它需要一个接受 String=>Int
和 returns 新值的函数,一个函数 String=>Boolean
。我们可以通过在原始函数上使用 andThen
来构造这个新函数。这将获取 a
的结果并将其与新函数 b
.