val a = Some(7)
val b = Some(9)
Applicative[Option].ap2(Some(add))(a,b)
然后我尝试将这段代码迁移到象下面这样的kotlin和arrow。
Option.applicative()
.tupled(Some(7), Some(9))
.ap(Some(::add))
// works but dirty
fun add(tuple: Tuple2<Int, Int>): Int = tuple.a + tuple.b
// not work, compilation error
// fun add(a: Int, b: Int): Int = a + b
您注意到,必须在Tuple2
函数签名中指定add
。
我搜索了arrow的官方文档,但是没有apN
函数,如ap2,ap3,ap4。
是否可以使用不包含Tuple2
类型的第二个功能?
答案 0 :(得分:1)
一旦版本0.10可用,Arrow就会在处理此问题的函数类型上提供一个.tupled()
方法,因此您可以编写:
Option.applicative()
.tupled(Some(7), Some(9))
.ap(::add.tupled())
fun add(a: Int, b: Int) = a + b
用于最多22个参数的函数。