使用对象方法的Perl映射

nan*_*ocv 2 perl instance-method map-function

我有一个Perl模块文件MyClass.pm,具有非常基本的类定义.

use strict;
use warnings;

package MyClass;

sub new {
    my $this = shift;
    my $self = {};
    bless $self, $this;
    return $self;
}

sub displayChar{
    my $self = shift;
    my $char = shift;
    print $char . "\n";
}

1;
Run Code Online (Sandbox Code Playgroud)

我还有一个myClass.pl创建MyClass实例的文件.

#!/usr/bin/perl
use strict;
use warnings;

use MyClass; 
my $myClass = MyClass->new();

$myClass->displayChar('a'); # This line works right

my @charArray = ('a', 'b', 'c');
map($myClass->displayChar, @charArray);
Run Code Online (Sandbox Code Playgroud)

当我调用该displayChar方法时,它工作正常,但是当我尝试使用该方法的map函数时,它会给我三次这个错误(每个数组项一次,我猜):

Use of uninitialized value $char in concatenation (.) or string at MyClass.pm line 16.
Run Code Online (Sandbox Code Playgroud)

我是否以错误的方式使用地图功能?或者也许不可能使用对象方法作为第一个参数?

too*_*lic 5

您需要将值传递给您的displayChar方法:

map($myClass->displayChar($_), @charArray);
Run Code Online (Sandbox Code Playgroud)

map本地将$ _变量设置为数组的每个值.

  • @nanocv:我发现`map`的块版本让事情变得更加清晰 - "map {$ myClass-> displayChar($ _)} @charArray;`.另外,如果你没有对`map`返回的列表做某事,你应该使用`foreach`而不是``$ myClass-> displayChar($ _)foreach @charArray;` (6认同)