【发布时间】:2010-11-17 10:43:57
【问题描述】:
所以我正在包装 Mechanical Turk API 的部分内容,您需要指定资格要求,例如:
Worker_Locale == "US"
Worker_PercentAssignmentsApproved > 95
...
在我的代码中,我想允许上面的语法并将它们翻译成如下内容:
QualificationRequirement("00000000000000000071", "LocaleValue.Country", "EqualTo", "US")
QualificationRequirement("000000000000000000L0", "IntegerValue", "GreaterThan", 95)
我可以通过声明如下对象来实现我想要的大部分内容:
object Worker_PercentAssignmentsApproved {
def >(x: Int) = {
QualificationRequirement("000000000000000000L0", "IntegerValue", "GreaterThan", x)
}
}
但我不能对“==”(等于)或“!=”(不等于)方法做同样的事情,因为它们在 AnyRef 中被声明为 final。有没有标准的解决方法?或许我应该改用“===”和“!==”?
(我想一个很好的答案可能是总结一些不同的 scala DSL 是如何选择解决这个问题的,然后我可以做大多数人所做的任何事情。)
编辑:请注意,我并不是要实际执行相等比较。相反,我试图观察用户在 scala 代码中指示的比较运算符,保存该比较的基于对象的描述,并将该描述提供给服务器。具体来说,如下scala代码:
Worker_Locale == "US"
将导致以下参数添加到我的请求中:
&QualificationRequirement.1.QualificationTypeId=000000000000000000L0
&QualificationRequirement.1.Comparator=EqualTo
&QualificationRequirement.1.LocaleValue.Country=US
所以我不能覆盖equals,因为它返回一个Boolean,我需要返回一个代表所有这些参数的结构。
【问题讨论】: