2012-08-25 19 views
1

我本来期望下面的两个koans的答案是红宝石:这两个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

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

unless意味着if !(...)

unless false意味着if !(false)这意味着if true

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

+0

是所有语言是相同的,比如JavaScript? – Leahcim

+0

如果他们有“除非”关键字,那么肯定。 –

+0

这很违反直觉。根据你的回答,“如果不是真的”的意思是“如果!真”。但在普通英语中,“除非是真的”意味着“除非是真的”。我知道编程不是口语,但... – Leahcim

0

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

p customers unless customers.empty? 

含义,“打印阵列customers,除非它是空的”。同样地,

p customers if customers.size > 0