首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl 5 OOP编程

Perl 5 OOP编程
EN

Stack Overflow用户
提问于 2021-02-25 16:01:16
回答 1查看 89关注 0票数 2

我正在尝试将以下python程序移植到perl5:

代码语言:javascript
复制
import numpy as np


class Hensuu:
    def __init__(self, data):
        self.data = data


class Kansuu:
    def __call__(self, input):
        x = input.data
        y = x ** 2
        output = Hensuu(y)
        return output

x = Hensuu(np.array(9.0))
f = Kansuu()
y = f(x)

print(type(y))
print(y.data)

<类'main.Hensuu'> 81.0

Hensuu.pm

代码语言:javascript
复制
package Hensuu;
use strict;
use warnings FATAL => 'all';
our $version = 1.0.0;
sub new {
    our ($class,$data) = @_;
    my $self = {data=>$data};
    bless $self,$class;
    return $self;
}
1;

step1.pl

代码语言:javascript
复制
#!perl
use strict;
use warnings FATAL => 'all';
use Hensuu;
use PDL;
use PDL::Matrix;
my $datas = mpdl [[1.0,2.0],[3.0,4.0]];
my $x = Hensuu->new($datas);
print($x=>$datas);

Kansuu.pm

代码语言:javascript
复制
package Kansuu;
#use strict;
use warnings FATAL => 'all';
use Hensuu;
sub call {
    my ($self,$input) = @_;
    my $x = {$input => $data};
    #print($x);
    my $y = $x ** 2;
    my $output = Hensuu->new($y);
    return($output);
}
1;

step2.pl

代码语言:javascript
复制
#!perl
#use strict;
use warnings FATAL => 'all';
use PDL;
use PDL::Matrix;
use Hensuu;
use Kansuu;

my $a = mpdl [9.0];
my $x = Hensuu->new($a);
#my $f = Kansuu;
#my $y = $f->call($x);
my $y = Kansuu->call($x);
print($x=>$a);
print(ref($y));
print($y);

发射(第2.pl步)

代码语言:javascript
复制
Hensuu=HASH(0x1faf80)
[
 [9]
]
HensuuHensuu=HASH(0x25b71c0)
Process finished with exit code 0

上面的程序(第2.pl步),我想设置为"81“与打印($y);但我不能。环境是Windows10pro,草莓perl PDL版本(5.32.1.1),IDE是intellij社区版perl插件(2020.3)。

EN

回答 1

Stack Overflow用户

发布于 2021-02-25 16:17:08

Hensuu.pm:

代码语言:javascript
复制
package Hensuu;
use strict;
use warnings;

sub new {
    my ($class, $data) = @_;
    return bless {data => $data}, $class
}

sub data {
    my ($self) = @_;
    return $self->{data}
}

1

Kansuu.pm:

代码语言:javascript
复制
package Kansuu;
use strict;
use warnings;

use Hensuu;

sub call {
    my ($input) = @_;
    my $x = $input->data;
    my $y = $x ** 2;
    my $output = Hensuu->new($y);
    return $output->data
}

1

步骤2.pl:

代码语言:javascript
复制
#!perl
use strict;
use warnings;
use feature qw{ say };

use PDL;
use PDL::Matrix;
use Hensuu;
use Kansuu;

my $p = mpdl [9.0];
my $x = Hensuu->new($p);
my $y = Kansuu::call($x);
say $y;
  • 不要在不需要全局的事情上使用our变量。
  • 不要使用$a作为词法变量,它是排序中使用的一个特殊变量。
  • 低级别Perl不为属性创建访问器,您需要自己实现它们(更高级别的方法请参见Moo驼鹿 )。
  • Kansuu不是OO类,使用完全限定的子例程而不是方法。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66372019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档