2013-09-30 25 views
0

這是我的代碼如何創建一個類並將對象作爲參數傳遞給perl中的方法?

 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

爲什麼類和對象?既不在您現有的代碼中。 – ysth

+2

oops ...已編輯... n我是新的perl ..是不是可以在perl中通過TKomplex作爲參考? – no1

+0

Perl的本地對象方向與其他語言的工作方式截然不同。 *理解*源代碼的對象模型,並在Perl模型中重新設計*。總之,重新設計。沒有太多的樂趣... – vonbrand

回答

3

這裏有一種方法,使用武對象:

文件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(...),並將其更改爲在$a$b之前採用$class參數。

不武,取出使用武,有條款和補充:

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} 
    } 
} 
+0

謝謝你... bt我得到錯誤,像不能找到moo.pm – no1

+2

我可以做不駝鹿,不能我嗎? – no1

+4

添加了mooseless示例,但您最好安裝Moo或Moose。 – ysth

相關問題