2011-04-14 6 views
12

Ruby Koans aracılığıyla yolumu çalışıyorum ve şu anda AboutHashes üzerinde yaşıyorum. Bu noktaya kadar assert_equals, assert_equal alan expected_value virgül actual value (ör. assert_equal 2, 1 + 1) özel bir formatlama stilini takip etmiştir. Ancak Hakkında Hashes'deki test_creating_hashes def'inde, bu modeli takip etmeyen bir assert_equal vardır ve eğer bu modelle eşleşecek olursa, başarısız olur. Özellikle:assert_equal karmaları için biçimlendirme/sözdizimi neden diğer assert_equals değerlerinden farklı?

def test_creating_hashes 
    empty_hash = Hash.new 
    assert_equal {}, empty_hash # --> fails 
    assert_equal({}, empty_hash) # --> passes 
end 

Yani bu durumda assert_equal hakkında özel nedir?

denemesi hata mesajının et: Yakut boş blok {geçen birinci örnek ayrıştırır için

<internal:lib/rubygems/custom_require>:29:in `require': /Ruby_on_Rails/koans/about_hashes.rb:7: syntax error, unexpected ',', expecting keyword_end (SyntaxError) 
assert_equal {}, empty_hash #{} are also used for blocks 
       ^
from <internal:lib/rubygems/custom_require>:29:in `require' 
from path_to_enlightenment.rb:10:in `<main>' 
+1

İlginç bir durum, ancak test hatası iletisini verdiyseniz yanıtlanması daha kolay olacaktır. –

cevap

21

Bu} değil, boş bir karma başarısız olur. Eğer bir SyntaxError verdiyse (aşağıya bakınız) şaşırtmayacağım. Bununla birlikte, parantezi açıkça koyarak, Ruby'ye "bu yönteme geçmek istediğim argümanlardır" diyorsunuz.

def t(arg1, arg2) 
    p arg1 
end 


ruby-1.9.2-p136 :057 > t {} 
ArgumentError: wrong number of arguments (0 for 2) 
ruby-1.9.2-p136 :056 > t {}, arg2 
SyntaxError: (irb):56: syntax error, unexpected ',', expecting $end 
t {}, arg2 
+0

'assert_equal ({}), empty_hash' da çalıştı. Bunun, ayrıştırıcının '({})' boş bir karma olarak yorumladığı anlamına mı geliyor? – MacSean