Ruby如何精简这个简单的代码?

Ruby如何精简这个简单的代码?,ruby,performance,Ruby,Performance,我只需要以下逻辑运行一次,因为这将被放入一个循环中。我被我声明的许多变量和方法弄得不知所措,所以这将加快我在个人层面上的调试速度 $just_once = 1 if $just_once.nil? if $just_once == 1 p "Its PASSING!!" $just_once = 2 end 我觉得5行太多了。应该有办法将其减少到只有2-3行,甚至1行。这是有效的: $just_once = 1 if $just_once.nil? p "Its PASSING!!"

我只需要以下逻辑运行一次,因为这将被放入一个循环中。我被我声明的许多变量和方法弄得不知所措,所以这将加快我在个人层面上的调试速度

$just_once = 1 if $just_once.nil?
if $just_once == 1
  p "Its PASSING!!"
  $just_once = 2
end
我觉得5行太多了。应该有办法将其减少到只有2-3行,甚至1行。

这是有效的:

$just_once = 1 if $just_once.nil?
p "Its PASSING!!" if $just_once == 1 && $just_once += 1
因为你没有解释你的最终目标是什么,所以不确定你的目的是什么。

这是可行的:

$just_once = 1 if $just_once.nil?
p "Its PASSING!!" if $just_once == 1 && $just_once += 1
因为你没有解释你的最终目标是什么,所以不确定你的目的是什么。

按以下步骤操作

$just_once ||= 1
p "Its PASSING!!" if $just_once == 1 && $just_once += 1
更新如铁皮人所说

$just_once ||= 1
if $just_once == 1
   p "Its PASSING!!"
   $just_once += 1
end
按以下步骤做

$just_once ||= 1
p "Its PASSING!!" if $just_once == 1 && $just_once += 1
更新如铁皮人所说

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

这并不像其他答案那么简短,但我会这样编写,以保持可读性:

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

这并不像其他答案那么简短,但我会这样编写,以保持可读性:

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
方便的真理:

  • nil.to_i
    为零
  • 1.to_i
    1
  • 全局变量在第一次访问时会自动激活,就像实例变量一样
  • =
    非常乐意比较
    nil
    1
  • 这允许您隐藏
    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
    
    方便的真理:

  • nil.to_i
    为零
  • 1.to_i
    1
  • 全局变量在第一次访问时会自动激活,就像实例变量一样
  • =
    非常乐意比较
    nil
    1
  • 这允许您隐藏
    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
    
    这个怎么样

    (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
    
    这个怎么样

    (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
    


    你忘了全球标志。我尝试了这个,它的循环像疯了一样,因为变量被删除,并在循环中重新创建。Deigo知道了,但我认为你的| |=运算符的语法更好达哈,是的,我需要等待大约2-3分钟,然后再打勾。带有“&&”运算符组合的“if”语句让我大吃一惊。我不知道这是可能的如果$just_once==1&&$just_once+=1,则DDon不连锁
    if
    只应测试一个条件
    $just_once+=1
    应该出现在块内部。@如果条件为,您想让我将
    $just_once+=1
    放在
    内部。。结束
    block.@Matt我按照tinman的建议做了。。作为一个例子,OP提到如果
    nil
    ,则分配
    1
    ,但在实际情况下,这不可能,因此行
    $just_once+=1
    是有意义的。不管怎么说,现在我的答案是,你忘记了全球符号。我尝试了这个,它的循环像疯了一样,因为变量被删除,并在循环中重新创建。Deigo知道了,但我认为你的| |=运算符的语法更好达哈,是的,我需要等待大约2-3分钟,然后再打勾。带有“&&”运算符组合的“if”语句让我大吃一惊。我不知道这是可能的如果$just_once==1&&$just_once+=1,则DDon不连锁
    if
    只应测试一个条件
    $just_once+=1
    应该出现在块内部。@如果条件为,您想让我将
    $just_once+=1
    放在
    内部。。结束
    block.@Matt我按照tinman的建议做了。。作为一个例子,OP提到如果
    nil
    ,则分配
    1
    ,但在实际情况下,这不可能,因此行
    $just_once+=1
    是有意义的。不管怎样,现在我的答案都是正确的。谢谢大家的参与。但是,一旦我处理完这些代码,我将删除它们,因此可读性不是一个问题可预见性应始终是一个问题。互联网运行在“嘿,我想知道这是否有效?”代码之上,这些代码本应被丢弃或重构,但没有人有机会。所以,一定要把你的代码永远用在写作上。@theTinMan:今天的quick hack是明天支持整个业务的关键任务应用程序。一次又一次,确实如此。很多次,我不得不维护别人的黑客,并把他们编成某种可以支持的形式;我对他们的决定进行了诅咒和发誓。而且,我非常自豪地说,继承了我的代码的人告诉我,他们非常欣赏我的代码可读性强、文档记录良好,这很好,谢谢大家的参与。但是,一旦我处理完这些代码,我将删除它们,因此可读性不是一个问题可预见性应始终是一个问题。互联网运行在“嘿,我想知道这是否有效?”代码之上,这些代码本应被丢弃或重构,但没有人有机会。所以,一定要把你的代码永远用在写作上。@theTinMan:今天的quick hack是明天支持整个业务的关键任务应用程序。一次又一次,确实如此。很多次,我不得不维护别人的黑客,并把他们编成某种可以支持的形式;我对他们的决定进行了诅咒和发誓。而且,我非常自豪地说,继承了我的代码的人告诉我,他们非常欣赏我的代码可读性好、文档化好,这很好听。修剪行数很容易,但这并不意味着它会更快。下面的所有解决方案在下面执行完全相同的操作。修剪线计数很容易,但这并不意味着它会更快。全部的