2014-02-06 3 views
0

Мне просто нужна следующая логика для запуска один раз, так как это будет помещено внутри цикла. Я перегружен многими переменными и методами, которые я объявил, поэтому это ускорит мою скорость отладки на индивидуальном уровне.Ruby Как обрезать этот простой код?

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

Methinks 5 строк слишком много. Там должны быть способы, чтобы сократить его до всего 2-3 линий или даже 1.

+0

Обрезка линии подсчета проста, но это не значит, что она будет быстрее. Все приведенные ниже решения выполняют точно такие же операции под ним. –

ответ

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 
+0

блестящий! Таким образом, можно обрезать до 1 строки. – user3163916

+0

haha ​​... yup :-) – Abdo

1

Это работает:

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

Не уверен, что для хотя, так как вы не объясните, что ваша конечная цель.

2

Do, как показано ниже

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

обновление, как сказал @The Tin Man.

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

Вы забыли глобальный знак. Я пробовал это, и он зацикливался, как сумасшедший, поскольку переменная была удалена и воссоздана в цикле. Deigo получил это, но, по-моему, у вас есть лучший синтаксис с этим оператором || =.: D – user3163916

+0

@ пользователь3163916 сделана !! Проверьте это :) –

+0

Ха-ха, да, мне нужно подождать около 2-3 минут, прежде чем поставить отметку 'check'. Это утверждение «если» с комбинацией оператора «&&» просто взорвало мой разум. Не знал, что это возможно. : D – user3163916

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 

(Tin Man, пожалуйста, прости мои грехи :)


Наконец, на основе замечаний с мю слишком коротка:

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

Хорошо, спасибо за участие. Я собираюсь удалить код, когда я закончил с ними, так что читаемость не вызывает беспокойства. : P – user3163916

+1

Считываемость всегда должна быть проблемой. Интернет работает поверх «эй, интересно, работает ли это?» код, который * должен был быть выброшен или реорганизован, но никто никогда не получал шанс. Поэтому всегда пишите так, как будто ваш код будет использоваться навсегда. –

+0

@ user3163916 достаточно справедливо. См. Обновление. – Matt

1

Удобные истины:

  1. nil.to_i равен нулю.
  2. 1.to_i является 1.
  3. Глобалы автоматически оживляются при первом доступе, подобно переменным экземпляра.
  4. == с удовольствием сравнивает nil и 1.

Это позволяет скрыть условную логику в to_i вызова:

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

Еще одна удобная истина, что nil является falsey, так что вы можете использовать логическое значение вместо счетчика:

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

Не более ли просто читать '' just_once = 2' в блоке 'if'? Когда это будет когда-либо иначе? – Matt

+0

@Matt: На втором, хотя я бы, вероятно, пошел прямо к булевому, а не подсчитывал вещи: 'if! $ Was_here_already ....' –

+0

Хорошая точка. Это можно свести к '$ was_here_already = true и p" Это ПРОХОДИТЬ! " if! $ was_here_already' – Matt

Смежные вопросы