gpt4 book ai didi

arrays - 如何将一个数组和一个字符串作为参数传递给函数?

转载 作者:行者123 更新时间:2023-12-02 07:02:10 25 4
gpt4 key购买 nike

因为我找不到一种方便的方法来检查 $str 是否在 @array 中,所以我尝试自己制作一个,但它不起作用.

我猜这是因为数组和字符串混淆了。它不断将 0 提供给 $str。请让我知道如何修复它。

use 5.010;
use strict;
use warnings;

sub ifin {
my (@array, $str) = @_;
for my $i (@array) {
if ($i eq $str) {
return 1;
}
}
return 0;
}

my @f = (1, 2, 3, 4);
my $k = 1;
print ifin(@f, $k);

最佳答案

您不能将数组传递给子函数,只能传递标量列表。

ifin(@f, $k);

相同
ifin($f[0], $f[1], $f[2], $f[3], $k);

因为 @f 求值为其元素列表。

将数组传递给子对象的一种方法是传递引用。

sub ifin {
my ($array, $str) = @_;
for my $e (@$array) {
return 1 if $e eq $str;
}

return 0;
}

my @f = (1,2,3,4);
my $k = 1;
print(ifin(\@f, $k), "\n");

顺便说一下,也可以写成:

my @f = (1,2,3,4);
my $k = 1;
print(( grep { $_ eq $k } @f ) ? 1 : 0, "\n");

您可以使用pop来保留现有的调用约定。 .

sub ifin {
my $str = pop(@_);
for my $e (@_) {
return 1 if $e eq $str;
}

return 0;
}

my @f = (1,2,3,4);
my $k = 1;
print(ifin(@f, $k), "\n");

关于arrays - 如何将一个数组和一个字符串作为参数传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10640982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com