В about_symbols.rb Руби Коана (https://github.com/edgecase/ruby_koans), у меня есть следующий код:Рубин Koan: Константы становятся символами
RubyConstant = "What is the sound of one hand clapping?"
def test_constants_become_symbols
all_symbols = Symbol.all_symbols
assert_equal true, all_symbols.include?(:"nonexistent")
assert_equal true, all_symbols.include?(:"What is the sound of one hand clapping?")
assert_equal true, all_symbols.include?("What is the sound of one hand clapping?".to_sym)
end
Как есть, тест пройден.
Три вопроса:
Почему пройти первый утверждают?
:"nonexistent"
не должен быть включен в all_symbols, но он включен, поэтому я должен что-то недопонимать.Когда я комментирую второе утверждение, тест не выполняется, потому что
"What is the sound of one hand clapping?".to_sym
не включен в all_symbols, тогда как:"What is the sound of one hand clapping?"
включен. Поскольку они эквивалентны, почему последнее утверждение терпит неудачу? Кроме того, почему это происходит, когда второе утверждение не закомментировано? (Почему второе утверждение оказывает какое-либо влияние на третье утверждение?)Насколько я знаю, точкой этого Ruby Koan было показать, что константы становятся символами (по крайней мере, это то, что я выводил из метода имя). Поскольку RubyConstant является константой со значением
"What is the sound of one hand clapping?"
, почему в список символов не входит"What is the sound of one hand clapping?".to_sym
? Единственное объяснение, о котором я могу думать, это то, что, вопреки имени метода, константы на самом деле не становятся символами.
Благодарим за помощь!
Этот вопрос задан здесь: http: //stackoverflow.com/questions/13295776/ruby-koans-75-test-constants-become-symbols-correct-answer? Lq = 1 – ZenBalance