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

scala – 保理应用程序特征

发布时间:2020-12-16 08:47:52 所属栏目:安全 来源:网络整理
导读:我有一个使用App特性的应用程序,它一切正常.但是从App继承的对象变得有点笨拙,所以我想把一些功能分解成特征.特别是,我想拆分命令行参数处理. 不幸的是,这似乎与DelayedInit不太匹配.所以这很好用: object Main extends App { println("arguments are: "+ a
我有一个使用App特性的应用程序,它一切正常.但是从App继承的对象变得有点笨拙,所以我想把一些功能分解成特征.特别是,我想拆分命令行参数处理.

不幸的是,这似乎与DelayedInit不太匹配.所以这很好用:

object Main extends App {
  println("arguments are: "+ args.mkString.mkString(","))
}

但是这会抛出一个NullPointerException:

trait CommandLineArguments { this: App =>
  println("arguments are: "+ args.mkString.mkString(","))
}

object Main extends App with CommandLineArguments

有没有办法让DelayedInit“包含”混合特征?

解决方法

看起来很奇怪,如果这样写一些,工作正常:

trait CommandLineArguments { self: App => 
  delayedInit {
     println("arguments are: "+ args.mkString.mkString(","))
  }
}

但是来自scaladocs(http://www.scala-lang.org/api/current/index.html#scala.DelayedInit):

Classes and traits inheriting the DelayedInit marker trait will have
their initialization code rewritten as follows.[Code] becomes delayedInit([Code]) Initialization code comprises all statements and all value definitions that are executed during initialization.

(编辑:李大同)

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

    推荐文章
      热点阅读