• ベストアンサー
  • 暇なときにでも

overloadの使い方

  • 質問No.4065790
  • 閲覧数91
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 74% (32/43)

演算子のオーバーロードを行うパッケージ「overload」の使い方を教えてください。
例えば、

2 + 3

のような加法演算子「+」をオーバーロードして減法演算子にし、

-1

と出力させるには、どのように書けばよいのでしょうか?
http://perldoc.jp/docs/perl/5.6.1/overload.pod
上記のperldocの日本語訳を読みましたが、理解するに至っていません。
どなたか、簡単にご説明頂けないでしょうか。ご教示よろしくお願い致します。

質問者が選んだベストアンサー

  • 回答No.2
  • ベストアンサー

ベストアンサー率 23% (3656/15482)

手元の「プログラミング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";
-------------------- ここまで --------------------
めでたく期待通りの結果.
お礼コメント
_--_--_-_-

お礼率 74% (32/43)

早速試してみました。
大変ご丁寧にお教え頂き、本当に助かりました。
是非とも活用していきたいと思います。
ご回答有難うございました。
投稿日時:2008/06/10 14:32

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 23% (3656/15482)

「本当にそうしたい」とすると,
・integer を overload して整数表現からオブジェクトを作る
・そのオブジェクトに対し + を overload して実際の処理を定義する
という 2段階が必要な気がします... が, なんでそんなことしたいんだろう?
お礼コメント
_--_--_-_-

お礼率 74% (32/43)

動機は、単なる好奇心に過ぎません。
できれば、実際のコードをお教え頂ければ幸いですが、非常に参考になりました。
頑張って勉強します。
ご回答有難うございました。
投稿日時:2008/06/02 23:41
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

ピックアップ

ページ先頭へ