我开始在我的代码中放置打印语句。为了不弄乱输出,我做了类似的事情:

dputs LEVEL, "string"

其中 LEVEL 为 0 表示错误,1 表示重要 .. 5 表示详细,并与 DEBUG_LEVEL 进行比较。现在我的问题是,在这样的声明中:
dputs 5, "#{big_class.inspect}"

字符串总是被评估,如果我将 DEBUG_LEVEL 设置为 1。这个评估可能需要很长时间。我最喜欢的解决方案是这样的:
dputs 5, '#{big_class.inspect}'

然后根据需要评估字符串。但是我无法以我可以评估的形式获取字符串。所以我唯一能想到的是:
dputs( 5 ){ "#{big_class.inspect}" }

但这看起来很难看。那么我如何评估一个 '#{}' 字符串?

最佳答案

我不认为你可以躲避那里的丑陋。插值发生在调用 dputs 之前,除非你把它放在一个块中,它会推迟它直到 dputs 评估它。我不知道 dputs 来自哪里,所以我不确定它的语义是什么,但我的猜测是块会给你你想要的懒惰评估。不漂亮,但它可以完成工作。

关于ruby - ruby 中 "#{}"字符串的惰性求值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12990624/

10-09 19:32