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

如何在Scala中修补新的控制结构?

发布时间:2020-12-16 18:34:49 所属栏目:安全 来源:网络整理
导读:是否有可能在 Scala中修补一个新的控制结构?基本上我想定义几个控制结构,例如以下的方法,除非方法,并且可以在我的项目中的任何地方访问它们. def unless(condition: = Boolean)(body: = Unit):Unit = if(!condition) body 解决方法 你不能猴子补丁,它改变已
是否有可能在 Scala中修补一个新的控制结构?基本上我想定义几个控制结构,例如以下的方法,除非方法,并且可以在我的项目中的任何地方访问它们.

def unless(condition: => Boolean)(body: => Unit):Unit = if(!condition) body

解决方法

你不能猴子补丁,它改变已经存在的对象.但是,在大多数情况下,您可以编写一个隐式转换,其行为方式相同(并且可以说更安全).

首先,除非另有说明,否则你不需要它成为每个类的方法.只需将其粘贴在某个对象中即可导入.

object Utility {
  def unless(condition: => Boolean)(body: => Unit):Unit = if(!condition) body
}

import Utility._

但有时你确实希望它像一个类的方法.例如,我经常写

option.map(x => f(x)).getOrElse(default)

这可以更紧凑地写成折叠:

option.fold(default)(x => f(x))

除了Option没有折叠.所以我:

class OptionWrapper[A](o: Option[A]) {
  def fold[Z](default: => Z)(action: A => Z) = o.map(action).getOrElse(default)
}
implicit def option_has_utility[A](o: Option[A]) = new OptionWrapper(o)

(这被称为“皮条客我的图书馆”模式).现在我可以使用fold来获取内容,因为任何时候都有一个选项并且我调用fold方法,编译器意识到没有折叠方法并且环顾四周它可以将类转换为具有折.有这样一种方法,新类对现有选项完全按照你自己对类本身的fold方法的要求.

(编辑:李大同)

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

    推荐文章
      热点阅读