gpt4 book ai didi

function - 有没有办法在 perl 中将函数声明为变量?

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

例如,伪代码如下。根据给定 x 的输入,如果 x 是 func1,则必须调用 func1()。如果 x 是 func2,则必须调用 func2()。有什么办法可以做到这一点吗?我不想使用 if 或 switch case 语句。还有其他方法可以根据用户输入进行函数调用吗? (就像将函数视为变量一样?

sub func1()
{...}

sub func2()
{...}

sub mainfunc()
{
x = <STDIN>;
x();
}

最佳答案

看起来您正在寻找 dispatch table

use warnings;
use strict;
use feature 'say';

my %option = (
o1 => sub { say "Code for func1, to run for key 'o1'"; },
o2 => sub { say "Code that should run for input 'o2'"; },
#...
);

my $input = <STDIN>;
chomp $input;

# Dereference the code-reference (run code) associated with $input value
$option{$input}->();

这里 sub { ... } 定义了 anonymous subroutine并返回 reference to code 。获取代码引用的另一种方法是获取命名子的引用,语法为 \&sub-name。作为引用,它是(单值)标量类型,因此可以用作哈希值。

因此,当用户提供 o1 时,运行的是引用 (sub { ... }) 中的代码,它是键 o1 的值哈希中的 ,即 $option{o1}

运行代码引用的语法很像取消引用数组或哈希引用

$ar->[0]     # dereference array reference, for the first element
$hr->{key} # dereference hash reference, for value for key 'key'
$cr->(LIST) # dereference code reference, to run with arguments in LIST

此处的标量变量 $cr 将具有代码引用,my $cr = sub { ... }

关于function - 有没有办法在 perl 中将函数声明为变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60408256/

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