这是我的代码
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?
答案 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}
}
}