私はscalaにかなり慣れておらず、これまでのところ本当に気に入っていますが、本当に奇妙な問題に悩まされています。D&Dスタイルのサイコロ式を実装して暗黙の変換を試してみたかったのです。すなわち2d12「2つの12面のサイコロを投げる」...あなたは私が何を意味するか知っています。
私が理解していることから、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
}
私は本当に立ち往生しています。あなたが助けることができればそれは素晴らしいでしょう、それはおそらく本当に単純なものです。
前もって感謝します