Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
识别scala类的方法/属性-可能的模拟记录称为方法?_Scala_Properties_Mocking - Fatal编程技术网

识别scala类的方法/属性-可能的模拟记录称为方法?

识别scala类的方法/属性-可能的模拟记录称为方法?,scala,properties,mocking,Scala,Properties,Mocking,我希望能够指定一个类的任意属性(val或def),而这个属性不是在一个容易模仿的特性中定义的。其动机是提供对实体的灵活引用—一对“要匹配的对象的值、属性”,如下所示: case class Employee(id :Long, name :String) case class Ref[E, T](value :T, property :Property[E]) def Ref[E, T](prop :E=>T, value :T) = new Ref(value, Property(pr

我希望能够指定一个类的任意属性(val或def),而这个属性不是在一个容易模仿的特性中定义的。其动机是提供对实体的灵活引用—一对“要匹配的对象的值、属性”,如下所示:

case class Employee(id :Long, name :String)
case class Ref[E, T](value :T, property :Property[E])

def Ref[E, T](prop :E=>T, value :T) = new Ref(value, Property(prop))
要像这样使用它:

val ref = Ref[Employee](_.name, "Motoko")
val major :Employee = repository(ref).head.get
任务是实现属性类,以便

Property[Employee](_.name)
...
Property[Employee](e=> e.name)

将返回相等的实例,存储库实现可以使用内部映射[Property,Query]为传递的引用创建适当的选择。我的第一次尝试是使用javaassist拦截和记录方法调用,并使用接收到的重写方法作为属性标识符,但它在模拟创建期间甚至在到达我的处理程序之前就在某些合成scala init方法上产生了NoSuchMethodError。我觉得像scalamock这样的scala库应该很容易实现,但我在API中找不到相关的功能。

问题有点不清楚,你能提供更多细节吗?(什么是
Property
class,实现看起来如何?)Property类正是我想要实现的。我对任何细节都不感兴趣,只是equals按规定工作。或者,我可以通过宏实现这一目标,但我相信它们更好地包含在库中。