gpt4 book ai didi

ruby - 只执行一次语句的最短 Ruby 单行代码

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:43 24 4
gpt4 key购买 nike

我正在寻找最短、最简单的 Ruby 单行代码来只执行一次语句。想法是在调试时使用它来快速将调试语句添加到只执行一次的循环中。

到目前为止我想到的最好的:

puts "do something interesting exactly once!" if (once ||= "0").next! == "1"

你能想出更短的东西吗?

为澄清而添加:

这些问题的想法是将重点放在“做一次”部分,而不是“做一些有趣的事情”部分。应该假设代码 do be executed once 可以是任何东西,而不仅仅是一个 puts 语句。

理想的解决方案也适用于不同类型的循环结构。例如。正如所指出的那样,我的初始解决方案仅在 once 变量已在循环上下文之外定义或者所使用的循环上下文未创建新词法范围的情况下才有效。

触发此问题的原始用例略有不同 - 它看起来更像下面。但我认为上面这个更简单的例子会更容易解释我正在寻找的那种解决方案。

def process
do_some_preprocessing()

raise SomeError if <once> # added temp. for debugging purposes - the <once> part is what this question is about!
dangerous_operation() # this can raise SomeError under certain conditions

rescue SomeError
attempt_to_rescue() and retry
end

最佳答案

嗯,你可以滥用 lambda 和闭包。

->{puts "do something interesting exactly once!";x=->{x}}[][]
#=> do something interesting exactly once!
#=> #<Proc:0x5465282c@(irb):10 (lambda)>

lambda 的原始内容只运行一次;任何后续调用都只会返回一个空过程。

您也可以滥用全局变量来获得更真实的“单行代码”,但这很糟糕。

$x ||= puts("do something interesting exactly once!") || 1

关于ruby - 只执行一次语句的最短 Ruby 单行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26534242/

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