Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对象返回随机数,而不是perl中的值_Perl - Fatal编程技术网

对象返回随机数,而不是perl中的值

对象返回随机数,而不是perl中的值,perl,Perl,我有这个PM类文件: use strict ; use warnings; package Math; sub new{ my $class = shift; my $self = {}; bless($self, $class); return $self; } sub add{ my $x = shift; my $y = shift; return $x + $y; } sub substract{ my $x

我有这个PM类文件:

use strict ;
use warnings;

package Math;


sub new{
    my $class = shift;
    my $self = {};
    bless($self, $class);
    return $self;
}


sub add{
    my $x = shift;
    my $y = shift;
    return $x + $y;
}

sub substract{

    my $x = shift;
    my $y = shift;
    return $x - $y;

}

sub multiple{

    my $x = shift;
    my $y = shift;
    return $x * $y;
}

sub divide{
    my $x = shift;
    my $y = shift;
    return $x / $y;
}

1;
我有一个主测试pl文件:

use strict ;
use warnings;
use Math;

my $math_action = new Math();
my $number1 = 5;
my $number2 = 3;
my $results = $math_action->add($number1, $number2);
print $results;
出于某种原因,每次跑步我都会随机得到奇怪的结果。
可能很简单(?)我很久没有接触perl了,挖了一个小时来寻找解决方案找不到…任何帮助都将不胜感激。

当您在perl中使用OOP时,每个方法的第一个参数都是您所祝福的

sub new{
    my $class = shift;
    my $self = {};              <--  this hashref
    bless($self, $class);
    return $self;
}


sub add{
    my $self = shift;           <-- is the first argument in methods
    my $x = shift;
    my $y = shift;
    return $x + $y;
}
sub-new{
我的$class=shift;

my$self={};当您在perl中使用OOP时,每个方法的第一个参数都是您需要的

sub new{
    my $class = shift;
    my $self = {};              <--  this hashref
    bless($self, $class);
    return $self;
}


sub add{
    my $self = shift;           <-- is the first argument in methods
    my $x = shift;
    my $y = shift;
    return $x + $y;
}
sub-new{
我的$class=shift;

my$self={};这在Perl6是不可能的,以过程子例程调用的方式访问对象方法作为类方法。但是现在您可以调用这些方法,而无需引用抛出一个实例resp.object,每个人都认为这很好:

例如:打印添加(2,3)。在您的情况下,当您忘记了受祝福的引用变量的声明和定义时


干杯。

这在Perl6是不可能的,以过程子例程调用的方式访问对象方法作为类方法。但是现在您可以调用这些方法,而无需引用抛出一个实例响应对象,并且每个人都认为这很好:

例如:打印添加(2,3)。在您的情况下,当您忘记了受祝福的引用变量的声明和定义时



干杯。

第一个参数是
$self
。请编写代码,我尝试传递3个参数,但出现了相同的随机结果。第一个参数是
$self
。请编写代码,我尝试传递3个参数,但出现了相同的随机结果。感谢它现在的工作,有没有办法让我删除$self并只保留v我实际需要并使用的变量,在每个子类中声明$self似乎有点奇怪。perl$self中的@user3906716用于存储程序状态。这样,每个方法都可以访问对象的内部状态并检索或存储对象变量。因此,如果您想使用$self编程,就不可能去掉$selfPerl中的OOP范例。@user3906716您可以调用函数,如
Math::add($number1,$number2)
但是你不使用对象,而是调用数学名称空间中的一个方法。这就像在c++/Java中调用一个静态方法一样再次感谢Murphy,我现在做了更改,我将在将来使用示例。我在3年前使用了很多perl,但主要是使用sub而不创建类,现在我终于回到它。我正在挖掘一个小时。再次感谢:-)@user3906716很高兴我能帮忙:)感谢它现在的工作,有没有办法删除$self并只保留我实际需要和使用的变量,在每个子部分声明$self似乎有点奇怪。perl$self中的@user3906716用于存储程序状态。这样每个方法都可以访问对象的内部状态,并检索或存储对象变量。因此,如果要使用Perl中的OOP范例进行编程,则无法删除$self。@user3906716您可以调用函数,如
Math::add($number1,$number2)
但是你不使用对象,而是调用数学名称空间中的一个方法。这就像在c++/Java中调用一个静态方法一样再次感谢Murphy,我现在做了更改,我将在将来使用示例。我在3年前使用了很多perl,但主要是使用sub而不创建类,现在我终于回到它。我正在挖掘一个小时。再次感谢:-)@user3906716很高兴我能帮上忙:)@user3906716这里的人通常+1答案/问题如果他们觉得有用的话,我可以建议添加一点解释,解释一下为什么这样做以及OP做错了什么吗?@Benjamin W。上面已经提到过,OP向一个函数发送了3个参数,同时打算发送2I如果你提到这一点,你会觉得作为一个独立的实体,你的答案会更好。@user3906716这里的人通常+1个答案/问题,如果他们觉得有用,我可以建议添加一点解释,解释一下为什么这样做以及OP做错了什么吗?@Benjamin W。上面已经提到过,OP向一个函数发送了3个参数,虽然打算发送2,但我认为如果您提到这一点,作为一个独立实体,您的回答会更好。