import
ComplexImplicits.
_
object
ComplexImplicits
{
implicit
def
DoubleComplex(value
:
Double)
=
new
Complex(value,
0.0
)
implicit
def
TupleComplex(value
:
Tuple
2
[Double,Double])
=
new
Complex(value.
_
1
,value.
_
2
);
}
class
Complex(
val
r
:
Double,
val
i
:
Double)
{
def
+(that
:
Complex)
:
Complex
=
(
this
.r + that.r,
this
.i + that.i)
def
-(that
:
Complex)
:
Complex
=
(
this
.r - that.r,
this
.i + that.i)
def
unary
_
~
=
Math.sqrt(r * r + i * i)
override
def
toString
=
r +
" + "
+ i +
"i"
}
object
Complex
{
val
i
=
new
Complex(
0
,
1
);
def
main(args
:
Array[String])
:
Unit
=
{
var
a
:
Complex
=
(
6.0
,
4.0
)
var
b
:
Complex
=
(
1.0
,
2.0
)
println(a)
println(a + b)
println(a - b)
println(~b)
var
c
=
5
+ b
println(c)
var
d
=
(
3.0
,
3.0
) + c
println(d)
}
}