- ベストアンサー
overloadの使い方
演算子のオーバーロードを行うパッケージ「overload」の使い方を教えてください。 例えば、 2 + 3 のような加法演算子「+」をオーバーロードして減法演算子にし、 -1 と出力させるには、どのように書けばよいのでしょうか? http://perldoc.jp/docs/perl/5.6.1/overload.pod 上記のperldocの日本語訳を読みましたが、理解するに至っていません。 どなたか、簡単にご説明頂けないでしょうか。ご教示よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
手元の「プログラミングPerl」 (O'reilly) を見ながら, っと. まず次のようなモジュール foo.pm を作ります: -------------------- ここから -------------------- package foo; use overload '+' => \&add_foo, q("") => \&stringify; sub import { overload::constant integer => \&make_foo, float => \&make_foo; } sub unimport { overload::remove_constant integer => \&make_foo, float => \&make_foo; } sub make_foo { bless { val => $_[1] }; } sub add_foo { my ($foo1, $foo2) = @_; bless { val => $foo1->{val} - $foo2->{val} }; } sub stringify { $_[0]{val}; } 1; -------------------- ここまで -------------------- これを使って次のような test.pl を作ると -------------------- ここから -------------------- use strict; use foo; print 1+2, "\n"; -------------------- ここまで -------------------- めでたく期待通りの結果.
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
「本当にそうしたい」とすると, ・integer を overload して整数表現からオブジェクトを作る ・そのオブジェクトに対し + を overload して実際の処理を定義する という 2段階が必要な気がします... が, なんでそんなことしたいんだろう?
お礼
動機は、単なる好奇心に過ぎません。 できれば、実際のコードをお教え頂ければ幸いですが、非常に参考になりました。 頑張って勉強します。 ご回答有難うございました。
お礼
早速試してみました。 大変ご丁寧にお教え頂き、本当に助かりました。 是非とも活用していきたいと思います。 ご回答有難うございました。