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拥有
Proc s作为匿名的第一类子例程对象.可以通过将块传递到
Proc::new ,Kernel#proc 或
Kernel#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关键字对传递.您可以在上面的代码中看到一个块正在运行,传递给 如果您有兴趣,这里有一个小玩具项目,演示了使用各种语言的一流闭包,包括Perl5和Perl6,Ruby,PHP,Python,ECMAScript,Smalltalk,Clojure,Scheme等等.其他人:http://joergwmittag.github.io/lambdaconscarcdr/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |