是否可以在scala中强制命名参数?
发布时间:2020-12-16 09:51:45 所属栏目:安全 来源:网络整理
导读:在某些方法中,我想强制命名参数.原因是自动生成的代码,其参数的顺序未指定(并将保持这种方式). 我能得到的最接近的是 private val _forceNamed: Object = new Object()def doSomething(forceNamed: Object = _forceNamed,arg1: String,arg2: String,...): Un
在某些方法中,我想强制命名参数.原因是自动生成的代码,其参数的顺序未指定(并将保持这种方式).
我能得到的最接近的是 private val _forceNamed: Object = new Object() def doSomething(forceNamed: Object = _forceNamed,arg1: String,arg2: String,...): Unit = { if (forceNamed != _forceNamed) { throw Exception(something) } // actually do stuff } 但是这只会在运行时失败,而在编译时失败的东西会更好. 解决方法
如果要关闭能够传入null的漏洞,可以使用值类作为防护.
scala> :paste // Entering paste mode (ctrl-D to finish) class Foo { import Foo._ def foo(x: Bar = bar,a: String,b: String) = println(a + b) } object Foo { private[Foo] class Bar(val i: Int) extends AnyVal private val bar = new Bar(42) } // Exiting paste mode,now interpreting. defined class Foo defined object Foo scala> val f = new Foo f: Foo = Foo@4a4f9c58 scala> f.foo(null,"","") <console>:13: error: type mismatch; found : Null(null) required: Foo.Bar f.foo(null,"") ^ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |