在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
}
}
什么,我想实现的是允许用户调用任何两个公共构造函数提供或不提供分隔符,但如果他们不提供分隔符自动拿基础构造函数中的一个,我想知道是否有一个值我可以传递给基础构造函数,以便scala使用默认值在私有基础构造函数上。
什么,我想,以避免它做在每个构造
def this(_3rdConstructor : SytringBuilder)(implicit s : Char = '.') ...
我在许多不同的方式尝试这样做了下,与价值观是隐含的,与分离器作为Option
,但我不得到我真正喜欢的结果,特别是因为斯卡拉抱怨在多个构造函数中有隐式值(这种方式挫败了他们的目的)。有没有办法以一种很好的方式实现这种行为没有
- 1)迫使用户提供一个分隔符。
- 2)进入“坏行为”所传递空值,然后确认他们(特别是因为这不会让我的分隔符是在构造一个
val
。 - 3)创造只是因为我不喜欢另外一种语言关于其中一个小小的事情:)。
是的,就像我想的那样,无论如何,我会留下这个问题没有答案,看看有人提出一个更好的主意有什么好的建议或解决方法,如果没有,那么我会接受你的答案。谢谢@迪马 – Ordiel
也许,如果我更好地理解你到底是什么“正在解决”,我也可以想出一个“解决方法”。 你能解释一下你认为需要改进的解决方案吗? (我不太在意被接受的答案,只是试图帮助) – Dima
好吧,我想在构造函数中为一些参数提供一个“责任链”,这样我就可以结束用一个“val”(用java语言中的'public final'变量,包含“分隔符”),我知道我可以通过在构造函数的参数中使用不同的名称,然后将它分配给'val separator'但这并不是对内存和变量的非常聪明的使用,而且我认为在我的参数(在这种情况下是分隔符)中有更好的名称,以便用户可以将它们称为'new TockenizerExample(separator ='/ ',data =“bla”) – Ordiel