Руби Коан: Константы становятся символами

В 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

Как есть, тест пройден.

Три вопроса:

  1. Почему первое утверждение проходит? : "nonexistent" не следует включать в all_symbols, но он включен, поэтому я, должно быть, неправильно понимаю.

  2. Когда я комментирую второе утверждение, тест не проходит, потому что "Какой звук хлопка в ладоши? ». to_sym не включен в all_symbols, тогда как :« Какой звук хлопает в ладоши? » включен. Поскольку они эквивалентны, почему последнее утверждение терпит неудачу? Кроме того, почему это проходит, если второе утверждение не закомментировано? (Почему второе утверждение имеет какое-либо влияние на третье утверждение?)

  3. Насколько мне известно, цель этого Ruby Koan заключалась в том, чтобы продемонстрировать, что константы становятся символами (по крайней мере, это то, что я делаю из названия метода) . Поскольку RubyConstant является константой со значением «Какой звук хлопает одной рукой?» , почему не включен «Какой звук хлопает одной рукой?» .To_sym в списке символов? Единственное объяснение, которое я могу придумать, это то, что, вопреки названию метода, константы на самом деле не становятся символами.

Спасибо за вашу помощь!

11
задан iCodez 23 January 2015 в 17:23
поделиться