加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl就像ruby中的匿名子程序

发布时间:2020-12-16 06:05:30 所属栏目:大数据 来源:网络整理
导读:我是 ruby的新手并尝试复制这个在 ruby中调用匿名子程序的perl: #!/usr/bin/perluse strict;use warnings;use feature 'say';# Make a reference to a subroutinemy $codes = { one = sub { say "This is code block one"; say "And this is code block one
我是 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方式?

更新:是的,这就像一个调度表.我将代码存储在哈希中,稍后运行该代码.

解决方法

Ruby拥有 Procs作为匿名的第一类子例程对象.可以通过将块传递到 Proc::new,Kernel#procKernel#lambda或使用“stabby lambda”lambda文字语法来创建过程.

#!/usr/bin/env ruby

# Make a reference to a subroutine
codes = {
  one: -> {
    puts "This is code block one"
    puts "And this is code block one's line two"
  }
}

codes.each do |name,code|
  # Execute anonymous subroutine
  code.()
end

Ruby中最广泛使用的匿名代码块形式是一个名为块的构造,它实际上不是一个对象,而只是一个语法构造. Ruby中的每个方法都只接受一个可选的块参数,可以在大括号中传递,也可以在普通方法参数后使用do / end关键字对传递.您可以在上面的代码中看到一个块正在运行,传递给Hash#each迭代方法.

如果您有兴趣,这里有一个小玩具项目,演示了使用各种语言的一流闭包,包括Perl5和Perl6,Ruby,PHP,Python,ECMAScript,Smalltalk,Clojure,Scheme等等.其他人:http://joergwmittag.github.io/lambdaconscarcdr/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读