【发布时间】:2016-01-22 03:05:01
【问题描述】:
我是 ruby 新手,并试图在 ruby 中复制这个调用匿名子例程的 perl:
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
# Make a reference to a subroutine
my $codes = {
one => sub {
say "This is code block one";
say "And this is code block one's line two"
},
};
for my $next_code ( keys %{ $codes } ) {
# Execute anonymous subroutine
&{ $codes->{ $next_code } };
}
我试过这个:
#!/usr/bin/ruby -w
codes = {
one: puts "This is code block one"
puts "And this is code block one's line two",
}
codes.each do |next_code|
next_code
end
但是,我得到语法错误。这可能吗,还是有另一种首选的 ruby 方式?
更新:是的,这就像一个调度表。我将代码存储在哈希中并稍后运行该代码。
【问题讨论】:
-
看起来您可能正在尝试实现调度表。如果是这样,最好在您的问题中提及这一点,以避免 XY 问题。在 Ruby 中可能有更好的方法,它采用与 Perl 完全不同的方法。
-
你能用常用词(不是perl代码)解释一下你想做什么吗?
-
&{ $codes->{ $next_code } }最好写$codes->{ $next_code }->()