我是新来的斯卡拉,所以请问这样一个愚蠢的问题。看着example如何使用scala编程基本的DSL。 想知道是否可以在Order类中使用vals而不是vars来重新创建它。 我尝试将val重命名为vars,但在to()方法中出现并发症错误,因为我正尝试重新分配val。如何在不使用变量的情况下编程scala DSL?
0
A
回答
2
您可以使Order
为案例类,并使用copy
方法在任何更改上创建新的不可变对象。
例子:
case class Order(price: Int = 0, qty: Int = 0, totalValue: Int = 0, account: String = null) {
def maxUnitPrice(p: Int) = copy(price = p)
...
}
3
您需要完成使您Order
一个不变的过程。
这意味着至少要创建一个构造函数,以便您可以在创建时设置所有的字段,并更改所有的mutators来创建并返回一个新对象,而不是改变和返回当前对象。
正如Alex所说,通过将Order
划分为一个案例类别,可以非常简洁地完成此操作。但是你不必一路走到案例课。这将做到:
class Order(val price: Int, val ins: Instrument, val qty: Int, val totalValue: Int, val trn: TransactionType, val account: String) {
def to(i: Tuple3[Instrument, Int, TransactionType]): Order = {
new Order(price, i._1, i._2, totalValue, i._3, account)
}
def maxUnitPrice(p: Int) = {
new Order(p, ins, qty, totalValue, trn, account)
}
def using(pricing: (Int, Int) => Int) = {
new Order(price, ins, qty, pricing(qty, price), trn, account)
}
def forAccount(a: String)(implicit pricing: (Int, Int) => Int) = {
new Order(price, ins, qty, pricing(qty, price), trn, a)
}
}
的情况下类可能是一个更好的主意(一两件事,复制方法将使方法更简洁) - 这只是表明一种替代。
您还需要将使用中的调用替换为默认构造函数,因为它不再存在。你可能做的是创建一个基本对象:
object BasicOrder extends Order(0, null, 0, 0, null, null)
,然后使用在所有通话的出发点,例如:
BasicOrder to sell(200 bondsOf "Sun")
maxUnitPrice 300
using {
(qty, unit) => qty * unit - 500
相关问题
- 1. 如何在不调用方法的情况下使用变量
- 2. Scala代码在不使用scalac编译的情况下运行?
- 3. 如何在不使用GoTo的情况下编程
- 4. 如何在不使用全局变量的情况下编写此代码?
- 5. 如何在不创建实例变量的情况下使变量可用
- 6. 如何在不改变变量的情况下进行递归
- 7. 多线程编程:在变量'iget'等于变量'iput'的情况下?
- 8. 如何在不使用上下文的情况下声明全局变量?
- 9. 如何在不使用类型的情况下使用GET传递变量?
- 10. 变量不会在目前情况下
- 11. 如何在不使用OpenGL ES的情况下使UIImage变亮?
- 12. 如何在不创建新变量的情况下引用现有变量?
- 13. 如何在不冻结程序的情况下计算变量的变化? [Python]
- 14. SPSS - 变量的情况下
- 15. 如何在不使用map的情况下使用Python编写wordcount程序reduce
- 16. 在不使用函数的情况下增加一个变量
- 17. 如何在不调用主程序流的情况下填充全局变量?
- 18. 如何在不使用GUI的情况下编写Jmeter脚本?
- 19. 如何在不使用撇号的情况下编写此JavaScript
- 20. 如何在不使用Visual Studio的情况下编译DLL?
- 21. 如何在不使用union的情况下编写Sql语句?
- 22. 如何在不扩展变量的情况下设置?
- 23. 如何在不带前缀的情况下需要变量
- 24. 如何在不改变大小写的情况下使用str_replace?
- 25. 如何仅在VSPROPS变量尚不存在的情况下设置VSPROPS变量?
- 26. 在不使用临时变量的情况下交换类中的变量
- 27. 如何在不使用变量的情况下输出Console.ReadLine()的输入
- 28. 如何访问在switch语句java的不同情况下使用的变量?
- 29. 如何在不使用getattr的情况下获取一种方法的变量
- 30. 如何在不删除变量的情况下删除变量中的数据?
回报与变化的新对象,而不是突变的的老,你就完成了。 – sschaef 2013-04-27 15:35:06