有许多例子如何将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
但是有标准手段吗?
答案 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