如果仅为无,则如何分配给选项

 Hykun 发布于 2023-02-06 16:31

在ruby中,可以这样做:

first ||= number

第一会得到数的值,只有当它是

如何在scala中做类似的事情?

到目前为止,我已经想出了这个并且它看起来不像红宝石那么好.

var first: Option[Int] = None
...
first = if (first == None) Option(number) else first
// or
first = Some(first.getOrElse(number))

senia.. 5

有一个scalaz运营商:

import scalaz._, Scalaz._

none[Int] <+> 1.some
// Some(1)

2.some <+> 1.some
// Some(2)

您可以使用a <+>= b而不是a = a <+> b:

var i = none[Int] // i == None
i <+>= 1.some // i == Some(1)
i <+>= 2.some // i == Some(1)

又见加[F [_]在scalaz的cheatsheet.

对于Option plus正在实施的orElse.

对于集合(List,Vector,Stream等)Plus被实现为append:

Vector(1, 2) <+> Vector(3, 4)
// Vector(1, 2, 3, 4)

我找不到一个方法来组合Option[T]T你想要的方式,但你可以写这样的方法:

implicit class PlusT[T, M[_]: Plus : Applicative](m: M[T]) {
  def ?+?(t: T) = m <+> t.point[M]
}

none[Int] ?+? 1
// Some(1)

2.some ?+? 1
// Some(2)

var i = none[Int] // i == None
i ?+?= 1 // i == Some(1)
i ?+?= 2 // i == Some(1)

您可以重命名此方法||,并使用它像||=只是喜欢Ruby,但是这个名字可以混淆其他开发商-已经有方法||Boolean.

1 个回答
  • 有一个scalaz运营商:

    import scalaz._, Scalaz._
    
    none[Int] <+> 1.some
    // Some(1)
    
    2.some <+> 1.some
    // Some(2)
    

    您可以使用a <+>= b而不是a = a <+> b:

    var i = none[Int] // i == None
    i <+>= 1.some // i == Some(1)
    i <+>= 2.some // i == Some(1)
    

    又见加[F [_]在scalaz的cheatsheet.

    对于Option plus正在实施的orElse.

    对于集合(List,Vector,Stream等)Plus被实现为append:

    Vector(1, 2) <+> Vector(3, 4)
    // Vector(1, 2, 3, 4)
    

    我找不到一个方法来组合Option[T]T你想要的方式,但你可以写这样的方法:

    implicit class PlusT[T, M[_]: Plus : Applicative](m: M[T]) {
      def ?+?(t: T) = m <+> t.point[M]
    }
    
    none[Int] ?+? 1
    // Some(1)
    
    2.some ?+? 1
    // Some(2)
    
    var i = none[Int] // i == None
    i ?+?= 1 // i == Some(1)
    i ?+?= 2 // i == Some(1)
    

    您可以重命名此方法||,并使用它像||=只是喜欢Ruby,但是这个名字可以混淆其他开发商-已经有方法||Boolean.

    2023-02-06 16:33 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有