假设代码的某一部分需要在不同的块/上下文中运行,具体取决于配置选项。例如,
if silence
silence_stdout do
# do something
end
else
# do the same thing
end
有没有办法在不重复# do something
代码的情况下编写此代码?
答案 0 :(得分:5)
取决于代码和#34;执行某些操作"你可以把它扔进lambda:
something = -> { do_something }
if silence
silence_stdout &something
else
something.call
end
或将其扔进方法:
def something
# Do something, lots and lots of something.
end
if silence
silence_stdout &method(:something)
else
something
end
你也可以把逻辑内部转一点:
def no_op
yield
end
def silence_stdout
# Do whatever and then...
yield
end
m = method(silence ? :no_op : :silence_stdout)
m.call do
# Do something
end
或者你可以使用整个类或lambda代替最后一个方法。