Scala中的构造函数局部变量
发布时间:2020-12-16 19:00:43 所属栏目:安全 来源:网络整理
导读:我正在练习5.7“不耐烦的 Scala”,在那里我需要创建一个名为Person的类Person:构造函数上的String,并且有2个属性firstName和lastName由名称由空格分隔.我的第一个审判是: class Person(name:String) { private val nameParts = name.split(" ") val firstN
我正在练习5.7“不耐烦的
Scala”,在那里我需要创建一个名为Person的类Person:构造函数上的String,并且有2个属性firstName和lastName由名称由空格分隔.我的第一个审判是:
class Person(name:String) { private val nameParts = name.split(" ") val firstName = nameParts(0) val lastName = nameParts(1) } 问题在于,现在nameParts作为一个私有的字段始终在类中可见,实际上应该只存在于构造函数的本地环境中.与我想要的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 Array(first,last) = name.split(" ") } 编辑: 您可以通过工厂方法对伴侣和默认构造函数实现您想要做的工作,该构造函数首先和最后一个作为参数: class Person(val first: String,val last: String) object Person { def apply(name: String) = { val splitted = name.split(" ") new Person(splitted(0),splitted(1)) } } scala> Person("Foo Bar") res6: Person = Person@37e79b10 scala> res6.first res7: String = Foo scala> res6.last res8: String = Bar 但是对于这个简单的例子,我更喜欢我的第一个建议. 您的链接中的示例也可以正常工作,但它与我的第一个例子是一样的. Afaik没有办法在构造函数中创建一个临时变量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |