加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala中函数组合的语法很好

发布时间:2020-12-16 18:39:50 所属栏目:安全 来源:网络整理
导读:我想在 Scala中找到与Haskell的desort =(reverse.sort)一样富有成效的语法……这是我的尝试: implicit class Composition[A,B,C](val g: A = B) { def o(f: B = C): A = C = { a:A = f(g(a))}}val fg = cos _ o sin 有没有什么办法可以摆脱_f的声明? 解决
我想在 Scala中找到与Haskell的desort =(reverse.sort)一样富有成效的语法……这是我的尝试:

implicit class Composition[A,B,C](val g: A => B) {
  def o(f: B => C): A => C = { a:A => f(g(a))}
}

val fg = cos _ o sin

有没有什么办法可以摆脱_f的声明?

解决方法

对于函数yes,但对于方法,没有.您的问题是您尝试使用g的方法,而不是函数.对于函数,已经有一个方法用于调用andThen:

val f: Int => Int = _ + 1
val g: Int => String = _.toString

scala> val fg = f andThen g
fg: Int => String = <function1>

scala> fg(2)
res3: String = 3

你自己的隐式类也会起作用(虽然我没有看过你想要的确切语义),使用像f和g这样的函数,因为我已经定义了它们.它甚至可以用于函数和方法(按此顺序).

def a(i: Int): Int = i + 1
def b(i: Int): String = i.toString

scala> f andThen a
res4: Int => Int = <function1>

但是,a andThen b不能正常工作,因为a是一种方法,你不能调用它然后继续.为了使用andThen,需要转换为一个不会自动发生的函数,因为函数不一定是预期的. a _然后将e扩展为一个函数,其中有一个名为andThen的方法,并且可以提供b(方法)的参数,因为编译器会隐式地将b转换为函数,因为函数是唯一的作为andThen的论据的东西.函数不是唯一一个名为andThen的方法,因此编译器不能指望100%的时间从一个方法转换为一个函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读