Ruby块的结果作为参数

时间:2014-09-18 07:47:00

标签: ruby block inline

有许多例子如何将Ruby块作为参数传递,但这些解决方案本身就传递了块。

我需要一个带有一些变量的解决方案,执行一个内联代码块,将此变量作为块的参数传递,并将返回值作为调用方法的参数。类似的东西:

a = 555
b = a.some_method { |value|
    #Do some stuff with value
    return result
}

a = 555
b = some_method(a) { |value|
    #Do some stuff with value
    return result
}

我可以想象一个自定义函数:

class Object
   def some_method(&block)
      block.call(self)
   end
end

def some_method(arg, &block)
   block.call(arg)
end

但是有标准手段吗?

2 个答案:

答案 0 :(得分:1)

我想,您正在寻找instance_eval

  

在接收器(obj)的上下文中计算包含Ruby源代码或给定块的字符串。为了设置上下文,在代码执行时将变量self设置为obj,使代码能够访问obj’s个实例变量。在instance_eval的{​​{1}}版本中,可选的第二个和第三个参数提供了报告编译错误时使用的文件名和起始行号。

String

答案 1 :(得分:0)

这正是@Arup Rakshit评论的内容。使用点击

def compute(x)
  x + 1
end

compute(3).tap do |val|
  logger.info(val)
end # => 4