- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
在 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 中,但它包含在内,所以我一定是误解了什么。
当我注释掉第二个断言时,测试失败,因为 "What is the sound of one hand clapping?".to_sym
不包含在 all_symbols 而 :"What is the sound of one hand clapping?"
已经包括了。既然是等价的,为什么最后一个assert会失败呢?另外,为什么当第二个断言没有被注释掉时它通过了? (为什么第二个断言对第三个断言有影响?)
据我所知,这个 Ruby Koan 的目的是证明常量变成了符号(至少,这是我从方法名称中推断出来的)。由于 RubyConstant 是一个值为 "What is the sound of one hand clapping?"
的常量, 为什么不是 "What is the sound of one hand clapping?".to_sym
包含在符号列表中?我能想到的唯一解释是,与方法名称相反,常量实际上并没有变成符号。
感谢您的帮助!
最佳答案
hoha 说得对,但我会尝试扩展和澄清一点。
解释器在解析test_constants_become_symbols
时会创建:nonexistent
符号。然后,当您运行它时,将调用 Symbol.all_symbols
以获取所有已知符号的列表,并且 :nonexistent
位于列表中。另请注意,"nonexistent"
上的双引号是语法问题而不是内部表示问题,因此 :nonexistent
和 :"nonexistent"
是同样的事情。
如果你注释掉这个:
assert_equal true, all_symbols.include?(:"What is the sound of one hand clapping?")
那么 :"What is the sound of one hand clapping?"
符号将不会被解析器看到,因此它不会出现在 all_symbols
数组中.执行test_constants_become_symbols
时会执行下面一行的.to_sym
方法调用;所以,:"What is the sound of one hand clapping?"
符号是在你得到你的 all_symbols
之后创建的,这将失败:
assert_equal true, all_symbols.include?("What is the sound of one hand clapping?".to_sym)
如果你在同一个解释器实例中再次执行 test_constants_become_symbols
(第二个 assert_equal
仍然被注释掉)那么两个未注释的 assert_equal
调用都会通过因为第一次运行 test_constants_become_symbols
将创建 :"What is the sound of one hand clapping?"
而第二个 Symbol.all_symbols
将包括它在返回的数组中。
在 irb
中运行您的代码而不将其包装在 def
中可能有助于您了解发生了什么。
关于 ruby 公案 : Constants become symbols,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5358727/
我最近尝试使用这个工具来提高我的 Rails 技能: http://github.com/edgecase/ruby_koans 但我无法通过一些测试。此外,我不确定我是否正确地做了一些事情,因为目标
我正在完成 Kotlin Koans 的 Comparison练习并想知道为什么 compareTo() 是被重写的函数,但 compare() 是正在使用的函数。 这两个函数有何关联? data c
我正在解决 the python koans .直到 34 号我才遇到任何真正的问题。 问题是: Project: Create a Proxy Class In this assignment, c
在 about_symbols.rb Ruby Koan (https://github.com/edgecase/ruby_koans) 中,我有以下代码: RubyConstant = "
我是 Clojure 新手,所以我一直在浏览 Clojure Koans最后几天。事情进展得相当顺利,直到 section on sequence comprehensions 。我在这部分遇到困难。
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我是一名优秀的程序员,十分优秀!