Ruby – 可以将块作为param作为实际块传递给另一个函数吗?
发布时间:2020-12-16 22:59:38 所属栏目:百科 来源:网络整理
导读:这就是我想要做的: def call_block(in_class = "String",block) instance = eval("#{in_class}.new") puts "instance class: #{instance.class}" instance.instance_eval{ block.call }end# --- TEST EXAMPLE ---# This outputs "class: String" every time
这就是我想要做的:
def call_block(in_class = "String",&block) instance = eval("#{in_class}.new") puts "instance class: #{instance.class}" instance.instance_eval{ block.call } end # --- TEST EXAMPLE --- # This outputs "class: String" every time "sdlkfj".instance_eval { puts "class: #{self.class}" } # This will only output "class: Object" every time # I'm trying to get this to output "class: String" though call_block("String") { puts "class: #{self.class}" } 在它说“instance.instance_eval {block.call}”的行上,我试图找到另一种方法使新的实例变量在块上运行实例eval.我能想到的唯一方法是将instance_eval传递给原始块,而不是作为变量或任何东西传递,而是像测试示例中那样作为实际块传递. 有小费吗? 解决方法
是.您可以通过在块变量前添加一个&符号来将块传递给另一个方法,如下所示:
def foo &blk # now,blk is a variable bound to a block object bar &blk end 你得到“class:Object”的原因是Ruby使用词法作用域.这意味着self in puts“class:#{self.class}”指的是main,默认上下文. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |