Ruby如何修剪这个简单的代码?

时间:2014-02-06 19:11:13

标签: ruby performance

我只需要运行一次以下逻辑,因为这将被放入循环中。我已经宣布了许多变量和方法,这让我不知所措,所以这将加快我个人级别的调试速度。

$just_once = 1 if $just_once.nil?
if $just_once == 1
  p "Its PASSING!!"
  $just_once = 2
end

Methinks 5行太多了。应该有办法将其减少到只有2-3行甚至1。

5 个答案:

答案 0 :(得分:2)

执行以下操作

$just_once ||= 1
p "Its PASSING!!" if $just_once == 1 && $just_once += 1

更新正如@ Tin Man告诉的那样。

$just_once ||= 1
if $just_once == 1
   p "Its PASSING!!"
   $just_once += 1
end

答案 1 :(得分:2)

这并不像其他答案那么短,但这就是我为了保持可读性而编码的方式:

if $just_once.nil? || $just_once == 1
  p "Its PASSING!!"
  $just_once = 2
end

为了学术兴趣,这里有一个单行:

p "Its PASSING!!" and $just_once = 2 if $just_once.nil? || $just_once == 1

(田人,请原谅我的罪过:)。


最后,基于mu的评论太短了:

p "Its PASSING!!" and $just_once = true if !$just_once

答案 2 :(得分:1)

这有效:

$just_once = 1 if $just_once.nil?
p "Its PASSING!!" if $just_once == 1 && $just_once += 1

不确定是什么,因为你没有解释你的最终目标是什么。

答案 3 :(得分:1)

方便的事实:

  1. nil.to_i为零。
  2. 1.to_i1
  3. Globals在首次访问时会像实例变量一样自动生成。
  4. ==非常乐意与nil1进行比较。
  5. 这允许您隐藏to_i调用背后的条件逻辑:

    if $just_once == 1
       p "Its PASSING!!"
       $just_once = $just_once.to_i + 1
    end
    

    另一个方便的事实是nil是假的,所以你可以使用布尔值而不是计数器:

    if !$been_here_already
       p "Its PASSING!!"
       $been_here_already = true
    end
    

答案 4 :(得分:1)

这个怎么样?

(p "it's passing"; $just_once = true) if (!$just_once)
"it's passing"
=> true

(p "it's passing"; $just_once = true) if (!$just_once)
=> nil