gpt4 book ai didi

ruby - 如何在 Ruby 的 block 中动态包装代码?

转载 作者:太空宇宙 更新时间:2023-11-03 17:38:59 25 4
gpt4 key购买 nike

假设代码的某一部分需要在不同的 block /上下文中运行,具体取决于配置选项。例如,

if silence
silence_stdout do
# do something
end
else
# do the same thing
end

有没有一种方法可以在不重复#do something 代码的情况下编写此代码?

最佳答案

根据“做某事”的代码量,您可以将其放入 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 而不是最后一个中的方法。

关于ruby - 如何在 Ruby 的 block 中动态包装代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9246551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com