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

Function.const的目的是什么?

发布时间:2020-12-16 09:31:19 所属栏目:安全 来源:网络整理
导读:这是在 ScalaDoc,但没有太多的文件。看来它总是返回第一个参数。 Function.const(1)(2)例如返回1。 为什么它存在,为什么它是有用的? 解决方法 给出一个更理论的答案:const是 SKI calculus的K组合器。当你使用相当抽象的概念,你没有太多的“使用”时,它
这是在 ScalaDoc,但没有太多的文件。看来它总是返回第一个参数。

Function.const(1)(2)例如返回1。

为什么它存在,为什么它是有用的?

解决方法

给出一个更理论的答案:const是 SKI calculus的K组合器。当你使用相当抽象的概念,你没有太多的“使用”时,它会弹出。考虑一个(Haskell风格)Functor特征:

trait Functor[F[_]] {
   def fmap[A,B](f:A=>B,fa: F[A]):F[B]
   //(<$) in Haskell
   def left[A,B](a:A,fb:F[B]):F[A] 
}

现在fmap需要抽象,因为它是一个函子的本质。但是我们可以写一个左边的一般的实现,在这里我们需要const:

trait Functor[F[_]] {
   def fmap[A,fb:F[B]):F[A] = 
     fmap(Function.const(a),fb)
}

测试与选项:

case object OptionFunctor extends Functor[Option] {
   def fmap[A,B] (f:A=>B,fa:Option[A]):Option[B] = fa match {
      case Some(a) => Some(f(a))
      case None => None
   }
}

//left works:
OptionFunctor.left("test",Some(42))
//--> Option[java.lang.String] = Some(test)
OptionFunctor.left("test",None:Option[Int])
//--> Option[java.lang.String] = None

正如你可以看到的,当我们在第二个参数中已经有这个函子的“角色模型”或“模式”的时候,它应该是什么(在一些函子中包装一个值)。定义它非常抽象,而不知道任何关于函子的类型只能通过使用const。

(编辑:李大同)

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

    推荐文章
      热点阅读