Ruby:这两个公案让我很难过

时间:2012-08-25 03:11:46

标签: ruby

我原本预计下面两个koans的答案都是

:default_value

但正确答案显然是:false_value

在第一篇中,我理解除非声明,

result = :false_value but not if the control statement is false. 

由于控制声明是“假”'即unless false,因此结果应为:default_value。第二个公案也一样。

请解释

def test_unless_statement
    result = :default_value
    unless false
      result = :false_value
    end
    assert_equal __, result
  end

  def test_unless_statement_modifier
    result = :default_value
    result = :false_value unless false

    assert_equal __, result
  end

2 个答案:

答案 0 :(得分:2)

在这两种情况下,正确的答案是:false_value。你可以这样想:

unless表示if !(...)

unless false表示if !(false),表示if true

或者只是注意双重否定相互抵消。

答案 1 :(得分:0)

布尔文字混淆了公案。一个更好的例子是

p customers unless customers.empty?

意思是'打印数组customers,除非它是空的'。等价地,

p customers if customers.size > 0