我对 scala 很陌生,到目前为止我真的很喜欢它,但我遇到了一个非常奇怪的问题。我想通过实现 D&D 风格的骰子表达式来尝试隐式转换。即2d12“掷两个十二面骰子”......你知道我的意思。
据我了解scala应该能够编译这个
(1 d 6).roll
甚至可能这个
1d6 + 2 - 1d30
但我在我的规格测试中收到“值 d 不是 int 的成员”编译错误。
package meh.toast
import scala.util.Random
object Dice {
class DiceSymbol(val amount:Int) {
def d(sides:Int):Dice = new Dice(amount, sides)
}
implicit def int2DiceSymbol(amount:Int) = new DiceSymbol(amount)
implicit def dice2Int(d:Dice) = d.roll
private val rnd = new Random()
protected def throwDice(sides:Int) = rnd.nextInt(sides) + 1
}
class Dice(amount:Int, sides:Int) {
def roll:Int = (1 to amount) map { _ => Dice.throwDice(sides)} sum
}
我真的被困住了。如果您能提供帮助,那就太棒了,这可能非常简单。
提前致谢