scala - 类构造函数中的非字段参数?
问题描述
是否有可能有不成为字段的构造函数参数?例如,
class Foo(p1: String, p2: Int) {
val f1 = p1 * p2
}
我想要的唯一字段是f1
, 不是p1
and p2
。这个想法是从参数中导出字段。
解决方案
这很好 - 两者p1
都不p2
是这里的字段,只是f1
. 使它们成为字段是选择加入而不是选择退出(案例类除外,其中所有参数也是字段,您对此无能为力)。
要使它们成为字段,您必须添加var
or val
,例如
class Foo(val p1: String, var p2: Int)
编辑:如果您想要一个与参数名称相同但类型不同或其他内容的字段,您可以执行以下操作:
class Foo(p1: String, val p2: Int) {
//Can be val if you want
var _p1: Int = (p1 : String).toInt
def p1: Int = _p1
def p1_=(p1: Int) = _p1 = p1 //An optional setter
}
这实际上与拥有一个名为 的字段相同p1
。
如果您还想使用一些复杂的操作来设置字段并使用局部变量,您可以使用块(也可能是辅助构造函数)
class Foo(p1: String, val p2: Int) {
val _p1: Int = {
val intermediateVariable: String = p1
intermediateVariable.toInt
}
def p1: Int = _p1
或者
class Foo(val p1: Int) {
def this(p1: String) = this({
val uselessIntermediateVariable = p1.toInt
uselessIntermediateVariable
})
}
推荐阅读
- c# - 使用实体框架、Lambda 表达式和存储库模式从多个表中搜索数据
- java - 如何从 ABC.jar 文件调用 libXYZ.so 的 API
- microservices - 平均响应时间与平均周转时间 (DIN_IEC_25023) 差异?
- c# - 在 ASP.NET Blazor 中获取和发布
- firebase - Firebase 身份验证暂存环境
- .net - .Net 项目的 SonarQube 模板
- javascript - 如何使用按钮关闭表单
- c# - 是否可以使用 List 进行运算符重载
没有继承它? - python - 即使 NN 和数据集相同,Keras 上的 Predict() 也会给出不同的结果
- java - 从 strings.xml 的随机数组中获取随机字符串