Ruby 关于 Symbol 的一个问题

mobiwolf · 2012年03月08日 · 最后由 natsuki 回复于 2012年03月10日 · 3026 次阅读

上代码,问问题啦。

def test_method_names_become_symbols
    symbols_as_strings = Symbol.all_symbols.map { |x| x.to_s }
    assert_equal true, symbols_as_strings.include?("test_method_names_become_symbols")
  end




我从系统中敲写代码,得到的 symbols_as_strings.include?("test_method_names_become_symbols") 的结果是 false,但是案例上是 true,我不确定是哪个错了,特地求证一下。

我认为 test_method_names_become_symbols 是定义的一个方法,不是一个符号 。不应该是 true,而我确实从终端上得到的是 false。

def test_constants_become_symbols
      all_symbols = Symbol.all_symbols
      assert_equal true, all_symbols.include?(:test_constants_become_symbols)
    end

以上是 true 却是正常的

求教。

method 的名字就是个 Symbol

另外...

assert_equal true, all_symbols.include?(:test_constants_become_symbols)

这样貌似不对...因为:test_constants_become_symbols 本身就创建了一个 Symbol, 所以这个 assert 会永远都是真的

Ruby 1.9.3 下试了一下...

winfield@eos:~/Development/Cocoa/ruby-china-ios$ pry [1] pry(main)> Symbol.all_symbols.include? :bbbbbbbbbbbbbbbbbbbb => true

@lainuo assert_equal true, all_symbols.include?(:test_constants_become_symbols) 这个是从案例上弄下来的代码。

@lainuo 方法就是符号,嗯,记住了。

@mobiwolf 案例中应该是先把 Symbol 转成 String, 然后再看看有没有 include? ("testxxx") 这个 String 吧...

要是不是这样...那它可能错了....

@lainuo 我帖子的正文中就是 block 把它转成上 string 了,而一楼的是另一个案例展示的没转 string 的情况。

@mobiwolf 那个是对的。不转的是错的,原因就是我三楼贴的那玩意

@lainuo 也就是说只要:XXX,那么就会自动创建一个 XXX 为名的符号了?不论这个是写在什么位置了吗

創建方法的同時應該是沒有同時創建對應的 symbol 吧?

更正一下,在定义方法的时候确实有创建对应的 symbol

需要 登录 后方可回复, 如果你还没有账号请 注册新账号