scala - scala中的案例类如何在内部工作
问题描述
我有 1 个关于 scala 案例类的问题
scala> case class Person(name:String, age:Int)
scala> val person1 = Person("Posa",30)
scala> val person2 = new Person("Posa",30)
两个对象(person1 和 person2)在什么方面有所不同?
new 关键字在这里有什么不同?
解决方案
创建案例类时
case class Person(name: String, age: Int)
编译器自动创建一个具有工厂apply
方法的伴生对象
object Person {
def apply(name: String, age: Int): Person = new Person(name, age)
}
new
不使用时调用,所以
val person1 = Person("Posa", 30) // function call creation syntax via companion's apply method
相当于
val person1 = Person.apply("Posa", 30)
另一方面,实例创建表达式Person
是对类(不是它的伴随对象)的构造函数调用
val person2 = new Person("Posa", 30) // invokes constructor
注意启动 Scala 3,即使是常规类也可以使用函数调用创建语法进行实例化
Scala 案例类生成应用方法,因此可以使用简单的函数应用程序创建案例类的值,而无需编写新的。Scala 3 将此方案推广到所有具体类。
推荐阅读
- javascript - 从 C# 方法创建 JavaScript 代码到 JavaScript 文件
- python - 使用海龟图形的递归谢尔宾斯基地毯
- android - 编辑文本光标选择在设置LeadingMarginSpan时在选择光标之前显示键入的字符?
- ios - iOS 13 UIView transform3D
- sql - 1052: 字段列表中的列 'user_id' 在以下情况下不明确
- git - Flutter 设备守护程序 #1 错误 - 无法在移动设备上运行任何应用程序
- c# - 如何在 NUnit Assert.That 子句中测试 lambda 表达式的异常和返回值
- java - 快速 JUnit 类测试测试未失败
- java - 如何找到 maven 已弃用的 groupdIds
- html - 如何在导航栏中下拉以在引导程序中工作