В about_symbols.rb Ruby Koan (https://github.com/edgecase/ruby_koans) у меня есть следующий код:
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, но он включен, поэтому я, должно быть, неправильно понимаю.
Когда я комментирую второе утверждение, тест не проходит, потому что "Какой звук хлопка в ладоши? ». to_sym
не включен в all_symbols, тогда как :« Какой звук хлопает в ладоши? »
включен. Поскольку они эквивалентны, почему последнее утверждение терпит неудачу? Кроме того, почему это проходит, если второе утверждение не закомментировано? (Почему второе утверждение имеет какое-либо влияние на третье утверждение?)
Насколько мне известно, цель этого Ruby Koan заключалась в том, чтобы продемонстрировать, что константы становятся символами (по крайней мере, это то, что я делаю из названия метода) . Поскольку RubyConstant является константой со значением «Какой звук хлопает одной рукой?»
, почему не включен «Какой звук хлопает одной рукой?» .To_sym
в списке символов? Единственное объяснение, которое я могу придумать, это то, что, вопреки названию метода, константы на самом деле не становятся символами.
Спасибо за вашу помощь!