Struct Point
¶struct Point
x
y
end
p1 = Point(1.0, 2.0)
Point(1.0, 2.0)
p1.x
1.0
p1.y
2.0
p2 = Point(3.0, 4.0)
Point(3.0, 4.0)
p1 + p2
¶import Base.+ # おまじない
function +(p1::Point, p2::Point)
Point(p1.x + p2.x, p1.y + p2.y)
end
+ (generic function with 164 methods)
p1 + p2
Point(4.0, 6.0)
Note:
+
演算子の多重定義(オーバーロード)をしていますっ
すでにシステムで定義されている演算子(関数)なので、このように import Base.+
を予め記述するか、function Base.:+(〜)
と書く必要があります。
p1 + (2.5, 3.2)
¶function +(p::Point, t::Tuple)
Point(p.x + t[1], p.y + t[2])
end
+ (generic function with 165 methods)
p1 + (2.5, 3.2)
Point(3.5, 5.2)
Note:
ここでは簡単のため、第2引数を Tuple
とだけ指定していますが、実際には NTuple{2}
のように要素数を特定したり、さらに NTuple{2,Number}
のように型を特定した方が良いでしょうっ
(2.5, 3.2) + p2
¶function +(t::Tuple, p::Point)
# TODO: 実装してみましょう!
end
(2.5, 3.2) + p2
# => Point(5.5, 7.2)
Note:
実装してみましょうっ
いくつか方法がありますよっ
Note:
Juliaの演算子オーバーロードは、実は多重ディスパッチのおかげっ!