我有一个类,其隐式参数定义为:
class Test(implicit one: String)
我想像这样实例化该对象:
val grr = new Test("aha")
我收到以下异常。
error: too many arguments for constructor Test: ()(implicit one: String)Test
val grr = new Test("aha")
但是如果我这样调用它
val grr = new Test()("haha")
grr: Test = Test@3bd40a57
我得到一个测试对象。</p>
为什么 Scala 实例化隐式方法要求您在此实例中调用带有空白参数的对象?为什么为此类对象实例提供隐式空白参数列表?
最佳答案
首先,Test
不是一个隐式类。请参阅this有关隐式类的讨论。
相反,Test
是一个没有显式构造函数参数但有一个隐式 String
参数的类。这意味着实例化 Test
的唯一方法是像您一样显式提供隐式参数,这很尴尬并且达不到目的,或者提供一个且仅有一个 String
在实例化时的隐式
范围内,并让编译器“拾取它”。
换句话说,如果您的范围内有类似的内容:
implicit val s: String = "haha"
那么实例化 Test
所需要做的就是:
val grr = new Test
如果范围内没有,编译器会让您知道。这是一件好事。
最重要的是确保您了解隐式参数和隐式类之间的区别。
关于java - Scala 隐式类参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42657125/