2013-03-22 5 views
0

Я бы поставил 1, если тест верен, и puts 0, если это не так. Я также хотел бы увеличить счетчик, который учитывается каждый раз, когда тест будет успешным. У меня есть это прямо сейчас:, используя ruby ​​ternary operator, чтобы поместить значение и прирастить переменную

puts test1 ? sum += 1 : 0 
puts test2 ? sum += 1 : 0 
puts test3 ? sum += 1 : 0 
puts test4 ? sum += 1 : 0 

Obvoiusly проблема заключается в том, что если я приращение суммы каждый раз, то я не печатаю 1, а значение суммы.

Я попытался сделать небольшой метод, который инкрементируется сумму, а затем возвращается 1, как это:

def inc_sum_ret_1(sum) 
    sum += 1 
    1 
end 

и называется, что вместо «суммы + = 1». Это, конечно, только увеличивалось от 0 до 1 каждый раз.

Есть ли хороший способ сделать это? Мне больше любопытно с интеллектуальной точки зрения, чем в том, чтобы мой код был особенно опрятным.

ответ

4

Ну, я думаю, что код, который вы пытаетесь написать это

puts test1 ? (sum += 1; 1) : 0 
puts test2 ? (sum += 1; 1) : 0 
puts test3 ? (sum += 1; 1) : 0 
puts test4 ? (sum += 1; 1) : 0 

Но, конечно, это не большая часть кода. Было бы намного лучше использовать if, как с точки зрения четкости кода, так и для устранения повторения.

+0

это здорово - но почему, когда я пытался использовать фигурные скобки для блока, где у вас есть парнеры, рубиновый дроссель? – Ramy

+1

@Ramy: Потому что это не блок - это всего лишь группа выражений. Блоки могут синтаксически следовать сообщению send, которое '?' Там нет. – Chuck

+0

Как говорит Чак, «это не очень хороший код». Это не то, что вы действительно хотите сделать в реальном коде. Да, это работает, но читать их нелегко, так что не привыкните писать такой код. Пишите ясно и чисто. Ваш стареющий мозг поблагодарит вас позже. –

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