在scala中具有主构造函数但没有参数的case类

在scala中具有主构造函数但没有参数的case类,scala,Scala,我试图在scala中创建一个case类 case class CaseClassPrimaryConstructor { } //Error: case classes without a parameter list are not allowed; use either case objects or case classes with an explicit `()' as a parameter list. case class CaseClassPrimaryCo

我试图在scala中创建一个case类

     case class CaseClassPrimaryConstructor {  
} //Error: case classes without a parameter list are not allowed; use either case objects or case classes with an explicit `()' as a parameter list.



 case class CaseClassPrimaryConstructor() {

} // Working  fine

不理解这种行为?请帮助

过去允许这样做,但现在不完全是因为您上次评论中提到的原因:

我试图创建一个类似“caseObj:CaseClassPrimaryConstructor=CaseClassPrimaryConstructu”的实例‌​表示“类型不匹配;找到:CaseClassPrimaryConstructor.type required:com.basic.constructor.CaseClassPrimaryConstructor”无效

CaseClassPrimaryConstru‌​在表达式上下文中(不是在
之后或在type参数中,或在
new
之后)的ctor
表示
CaseClassPrimaryConstru的伴随对象‌​ctor
类,因此您仍然会得到相同的错误,这相当令人困惑。对于case类,这个伴生对象具有
apply
方法,该方法的参数与只调用它的主构造函数相同<代码>CaseClassPrimaryConstru‌​ctor()实际上不是构造case类的特殊语法,它是调用
apply
方法的语法


此外,与没有参数的case类不同,您通常首先需要一个
对象
,因为所有实例都是相等的,它们的行为不应该不同,因此根本不需要创建新实例。

到底有什么不清楚的??您有机会阅读文档吗?如果这是一个语法相关的问题。我会说接受它,因为它是…感谢链接。我的疑问是,当我们定义一个普通类时,两个声明都可以正常工作,并且具有相同的影响/结果,但是对于案例类,为什么第一个声明报告了提到的错误,而第二个声明在两个声明具有相同含义的情况下正常工作,据我所知。我是不是遗漏了一些东西来理解差异?嗯。写正确的答案有点困难。Case类在声明中需要一些参数。所以在您的示例中,您只需不指定任何内容。它只是一种特殊的符号。就是这样。如果不包含
{}
,实际上可以避免编写括号。只需编写
case类CaseClassPrimaryConstructor
,这就足够了。第一段代码不起作用的另一个原因是编译器可以区分闭包和参数括号。这是有道理的。我只想补充一下我的观察。我试图创建一个类似“caseObj:CaseClassPrimaryConstructor=CaseClassPrimaryConstructor”的实例,该实例无效,表示“类型不匹配;找到:CaseClassPrimaryConstructor.type required:com.basic.constructor.CaseClassPrimaryConstructor”