gpt4 book ai didi

scala - Scala 中的构造函数局部变量

转载 作者:行者123 更新时间:2023-12-03 14:47:12 30 4
gpt4 key购买 nike

我在“不耐烦的 Scala”的练习 5.7 中,我需要创建一个类 Person,它在构造函数上采用 name:String 并具有 2 个属性 firstName 和 lastName 填充的名称由空格分隔。我的第一次试验是:

class Person(name:String) {
private val nameParts = name.split(" ")

val firstName = nameParts(0)
val lastName = nameParts(1)
}

问题是,现在 nameParts 仍然作为一个私有(private)字段在类中始终可见,而实际上应该只存在于构造函数的本地环境中。我想要的Java等价物是:
 class Person{
private final String firstName;
private final String lastName;

Person(String name){
final String[] nameParts = name.split(" ");
firstName = nameParts[0];
lastName = nameParts[1];
}
}

在这里,nameParts 仅存在于构造函数中,这是我的目标。关于如何在 Scala 中完成此操作的任何提示?

注意:我最终找到了一种更“Scalesque”的方式:
class Person(name:String) {
val firstName::lastName::_ = name.split(" ").toList
}

但我仍然想得到我的问题的答案。

最佳答案

一种避免定义提取器或需要伴随对象方法的方法是

class Person(name: String) {    
val (firstName, lastName) = {
val nameParts = name.split(" ")
(nameParts(0), nameParts(1))
}
}
object Example {
println(new Person("John Doe").firstName)
}

包含在 {..} 中的 scala 表达式具有最后一个子表达式的值

关于scala - Scala 中的构造函数局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10162539/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com