指示使用默认值的值
Value to indicate to use default
在 Scala 中我想要这样的东西
TokenizerExample.scala
class TokenizerExample private (whateva : Any)(implicit val separator : Char = '.') {
def this(data2Tokenize : String)(implicit s : Char) {
this("", s) //call to base constructor
}
def this(data2Tokenize : Array[Char])(implicit s : Char) { {
this("", s) //call to base constructor
}
}
我想实现的是允许用户调用提供或不提供分隔符的两个 public 构造函数中的任何一个,但如果他们不提供分隔符,则自动采用基数中的分隔符构造函数,我想知道是否有一个值可以传递给基本构造函数,以便 scala 在私有基本构造函数上使用默认值。
我想避免在每个构造函数中执行下一步操作
def this(_3rdConstructor : SytringBuilder)(implicit s : Char = '.') ...
我尝试了很多不同的方法,值是隐式的,分隔符是 Option
,但我没有得到我真正喜欢的结果,特别是因为 scala 抱怨有隐式值在多个构造函数中(这违背了拥有它们的目的)。有没有办法在没有
的情况下以一种很好的方式实现这种行为
- 1) 强制用户提供分隔符。
- 2) 通过传递空值然后验证它们进入 "bad-practices"(特别是因为这不允许我的分隔符在构造函数中成为
val
。
- 3) 创建另一种语言只是因为我不喜欢其中一种语言的一点小事:) .
我强烈建议您不要为此目的使用隐式。解析规则相当复杂,它使代码极难遵循,因为在没有调试器的情况下几乎不可能判断构造函数最终将接收到什么值。
如果您只想避免在多个地方定义默认值,只需在伴随对象中定义它即可:
object Foo {
val defaultParam = ','
}
class Foo {
import Foo.defaultParam
def this(data: String, param: Char = defaultParam) = ???
def this(data: List[Char], param: Char = defaultParam) = ???
// etc ...
}
如果您坚持使用隐式,您可以使用与上述类似的方法:只需进行 defaultParam
定义 implicit
,删除默认值,将其替换为隐式列表,然后 import Foo._
在您进行调用的范围内。但是,真的,不要那样做:它没有增加任何价值,在这种情况下只会有缺点。
在 Scala 中我想要这样的东西
TokenizerExample.scala
class TokenizerExample private (whateva : Any)(implicit val separator : Char = '.') {
def this(data2Tokenize : String)(implicit s : Char) {
this("", s) //call to base constructor
}
def this(data2Tokenize : Array[Char])(implicit s : Char) { {
this("", s) //call to base constructor
}
}
我想实现的是允许用户调用提供或不提供分隔符的两个 public 构造函数中的任何一个,但如果他们不提供分隔符,则自动采用基数中的分隔符构造函数,我想知道是否有一个值可以传递给基本构造函数,以便 scala 在私有基本构造函数上使用默认值。
我想避免在每个构造函数中执行下一步操作
def this(_3rdConstructor : SytringBuilder)(implicit s : Char = '.') ...
我尝试了很多不同的方法,值是隐式的,分隔符是 Option
,但我没有得到我真正喜欢的结果,特别是因为 scala 抱怨有隐式值在多个构造函数中(这违背了拥有它们的目的)。有没有办法在没有
- 1) 强制用户提供分隔符。
- 2) 通过传递空值然后验证它们进入 "bad-practices"(特别是因为这不允许我的分隔符在构造函数中成为
val
。 - 3) 创建另一种语言只是因为我不喜欢其中一种语言的一点小事:) .
我强烈建议您不要为此目的使用隐式。解析规则相当复杂,它使代码极难遵循,因为在没有调试器的情况下几乎不可能判断构造函数最终将接收到什么值。
如果您只想避免在多个地方定义默认值,只需在伴随对象中定义它即可:
object Foo {
val defaultParam = ','
}
class Foo {
import Foo.defaultParam
def this(data: String, param: Char = defaultParam) = ???
def this(data: List[Char], param: Char = defaultParam) = ???
// etc ...
}
如果您坚持使用隐式,您可以使用与上述类似的方法:只需进行 defaultParam
定义 implicit
,删除默认值,将其替换为隐式列表,然后 import Foo._
在您进行调用的范围内。但是,真的,不要那样做:它没有增加任何价值,在这种情况下只会有缺点。