Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
585 views
in Technique[技术] by (71.8m points)

scala - Class Extends a Trait With/Without Parentheses

Looking at this code from Scala in Depth...

scala> trait Foo {
     |  def someMethod(): Int = 5
     | }
defined trait Foo

scala> class Main() extends Foo {
     |   }
defined class Main

Then, I created a new Main (without the parentheses).

scala> class Main extends Foo {}
defined class Main

What is the meaning the parentheses in class Main()? How about without parentheses?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

5.3 of the spec:

If no formal parameter sections are given, an empty parameter section () is assumed.

This is different from methods, which can be parameterless.

When you write

class A

you are really writing

class A()

Moreover,

scala> class A(implicit i: Int)
defined class A

scala> new A
<console>:9: error: could not find implicit value for parameter i: Int
              new A
              ^

scala> new A()(1)
res1: A = A@32185a4a

scala> new A(1)
<console>:9: error: too many arguments for constructor A: ()(implicit i: Int)A
              new A(1)
              ^

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...