kotlin - arrow-kt 中是否有类似 ap2、ap3 的功能?
问题描述
val a = Some(7)
val b = Some(9)
Applicative[Option].ap2(Some(add))(a,b)
我尝试将此代码迁移到 kotlin 和箭头,如下所示。
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.10 版可用,Arrow 将有一个.tupled()
处理此问题的函数类型的方法,因此您将能够编写:
Option.applicative()
.tupled(Some(7), Some(9))
.ap(::add.tupled())
fun add(a: Int, b: Int) = a + b
对于最多 22 个参数的函数。
推荐阅读
- for-loop - for 循环中的 Goroutine 只取 slice 的最后一个值
- java - 我正在尝试实施 spring security 我配置了所有内容但仍然无法正常工作
- python - 如何将列表中的所有元素加在一起?
- python-3.x - django-admin 启动项目返回在 django 版本 3.10 的 mac 上找不到的命令
- javascript - 找不到模块:'core-js/modules/es.promise'
- java - OpenJDK 11 是否支持 Java Flight Recorder?
- java - 我想设置值,但 getInt 和 getString 不起作用,但它显示 getAsInt 和 getAsString,并且不接受成员名称
- javascript - 限制对 Facebook graph_url_engagement_count 的调用
- python - How to handle partial messages in MQTT subscriber?
- python - Pyspark 将字符串分解为多行列