如何创建一个类并将对象作为参数传递给perl中的方法?

时间:2013-09-30 04:44:08

标签: perl oop

这是我的代码

       public class TKomplex
   {
       public double real;
       public double imag;
   }

           public TKomplex ksum(TKomplex a, TKomplex b)
           {
               TKomplex res;
               res.real = a.real + b.real;
               res.imag = a.imag + b.imag;
              return (res);
           }


           public TKomplex kprod(TKomplex a, TKomplex b)
           {
               TKomplex res;
               res.real = a.real * b.real - a.imag * b.imag;
               res.imag = a.real * b.imag + a.imag * b.real;
               return (res);
           }

如何在perl中编写代码?如何创建一个类并将对象作为方法的参数传递给perl?

1 个答案:

答案 0 :(得分:3)

这是使用Moo对象的一种方式:

文件TKomplex.pm:

package TKomplex;
use Moo;

has real => (
    is => 'rw',
);
has imag => (
    is => 'rw',
);

sub ksum {
    my ($a, $b) = @_;
    my $res = TKomplex->new;
    $res->real( $a->real + $b->real );
    $res->imag( $a->imag + $b->imag );
    return $res;
}

sub kprod {
    my ($a, $b) = @_;
    my $res = TKomplex->new;
    $res->real( $a->real * $b->real - $a->imag * $b->imag );
    $res->imag( $a->real * $b->imag + $a->imag * $b->real );
    return $res;
}

1;

使用示例:

use TKomplex;
my $val = TKomplex->new( real => 3, imag => -2 );
my $ksum = TKomplex::ksum( $val, $val );
print "real: ", $ksum->real, " imag: ", $ksum->imag, "\n";

请注意,ksum和kprod不是方法,它们是子例程。如果您想将它们称为类方法,请说出TKomplex->ksum(...)并更改它们,以便在$class$a之前获取$b参数。

如果没有Moo,请删除使用Moo并使用子句并添加:

use strict;
use warnings FATAL => 'all';
sub new {
    my ($class, %object) = @_;
    return bless \%object, $class;
}
sub real {
    my $self = shift;
    if (@_) {
        $self->{real} = shift;
    }
    else {
        $self->{real}
    }
}
sub imag {
    my $self = shift;
    if (@_) {
        $self->{imag} = shift;
    }
    else {
        $self->{imag}
    }
}