【发布时间】:2019-11-23 20:48:58
【问题描述】:
使用 scala 在代码库中工作,希望您为某些类定义一种“制作新版本” - 例如,如果您有一个类 x(a :int, b:String, c:double )... 它会有这样的功能:
class x( a: Integer, b : String, c : Double) extends CanMakeNew
{
def newValue() = x( a, b, c)
}
我无法控制它 - 但不希望每次都实施它。或者,嗯……永远。 scala中有没有一种方法可以通过反射来迭代构造函数参数值?我可以使用反射来查看参数 types - 但由于此模块的参数名称尚未打开,因此我无法打开它 - 我无法将它们与存储的值相关联班上。从根本上说,我正在寻找实现这样的特征:
trait CanMakeNewDoneForMe extends CanMakeNew {
def newValue() {I need the code that goes here}
那么 scala 反射是否有任何方法可以检查构造函数或检查对象并看到“啊,这是构造函数中的第三个参数”?
【问题讨论】:
-
newValue()不能简单地返回this的原因是什么?x是否包含任何会导致返回相同实例成为问题的可变状态? -
是的 - x 包含大量可变状态。
标签: scala reflection scala-macros scala-reflect