Ok chỉ để kiểm tra tình trạng quá tải không có vẻ là làm việc cho tôi. Tôi không biết nếu đó là phiên bản của perl tôi có, hoặc phiên bản của overload.pm, hoặc một cái gì đó sai trái với cách tôi đã thực hiện nó, nhưng mã này không làm việc cho tôi.Tại sao không "sử dụng quá tải" làm việc với "sử dụng không gian tên: autoclean"?
phiên bản perl
This is perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-multi
quá tải phiên bản
perl -Moverload -e 'print "$overload::VERSION\n";'
1.07
Token.pm
package Token;
use namespace::autoclean;
use Data::Dumper;
use Moose;
use Moose::Util::TypeConstraints;
use overload '+' => \&_overload_add, fallback => 1;
has 'secretvalue' => (is => 'rw', isa => 'Int');
sub _overload_add{
my ($one, $two) = @_;
my $value = $one->secretvalue() + $two->secretvalue();
return ($value);
}
chính
use strict;
use warnings;
use Token;
my $t = Token->new(secretvalue => 17, key => 'x');
my $t2 = Token->new(secretvalue => 12, key => 'y');
my $x = $t + $t2;
print $x;
in
$VAR1 = 12900840;
Điều tồi tệ nhất là tôi không nhận được bất kỳ cảnh báo hoặc lỗi nào trong nhật ký.
CẬP NHẬT
Nhờ Freido cho việc tìm kiếm các vấn đề. Tôi đã cập nhật các câu hỏi chỉ trong trường hợp bất cứ ai khác tình cờ về điều này.
Cộng đồng Perl/Moose có thường không sử dụng quá tải không?
+1 để tìm giải pháp sau khi tôi đập đầu vào bàn trong một hoặc hai giờ để tìm sự cố với mã MY. lỗi thư viện ngớ ngẩn! – qodeninja
Đã ở đó, đã làm điều đó. :) Tôi đã khá bối rối bởi vấn đề của bạn quá cho đến khi tôi nhớ rằng 'quá tải' làm việc bằng cách chèn các biểu tượng ma thuật, và tôi tự hỏi nếu 'autoclean' đã rối tung với họ. – friedo
@nodebunny, tại sao lại phàn nàn về mã của người khác khi bạn có thể viết mã của riêng mình? :) Câu hỏi này đã truyền cảm hứng cho tôi viết [namespace :: sweep] (http://search.cpan.org/~friedo/namespace-sweep/lib/namespace/sweep.pm) mà sẽ không chà đạp quá tải của bạn. Thông tin thêm [tại đây] (http://blogs.perl.org/users/mike_friedman/2011/10/announcing-namespacesweep.html). – friedo