例如,请参阅以下
http://www.artima.com/pins1ed/functional-objects.html
代码使用
val oneHalf = new Rational(1, 2)
有没有办法做类似
的事情val oneHalf: Rational = 1/2
答案 0 :(得分:7)
我建议您为\
字面值使用其他运算符(例如Rational
),因为/
已在所有数字类型上定义为除法运算。
scala> case class Rational(num: Int, den: Int) {
| override def toString = num + " \\ " + den
| }
defined class Rational
scala> implicit def rationalLiteral(num: Int) = new {
| def \(den: Int) = Rational(num, den)
| }
rationalLiteral: (num: Int)java.lang.Object{def \(den: Int): Rational}
scala> val oneHalf = 1 \ 2
oneHalf: Rational = 1 \ 2
答案 1 :(得分:5)
我要窃取MissingFaktor的答案,但稍微改了一下。
case class Rational(num: Int, den: Int) {
def /(d2: Int) = Rational(num, den * d2)
}
object Rational {
implicit def rationalWhole(num: Int) = new {
def r = Rational(num, 1)
}
}
然后你可以做这样的事情,我觉得它比使用反斜杠更好一些,而且更加一致,因为你还是想在Rational上定义所有常用的数字运算符:
scala> 1.r / 2
res0: Rational = Rational(1,2)