Ruby ruby 面向对象,只有 method 没有 property,那这段代码怎么理解?

plasmiq · 2012年12月06日 · 最后由 smallX 回复于 2012年12月14日 · 2942 次阅读
favorites = {:composer => "Brahms", :painter => "Van Gogh", :comedian => "Groucho"}

1 composer 是什么冬冬? 2 ruby 执行这段代码时,究竟做了什么?

这不是 hash 么

是的,不理解 hash 用法,总觉得好像给对象加了 property

:composer 是对象还是方法,还是别的什么东东?

:composer 是 key,是一个 Symbol,符号。可以理解为一个不变的字符串。

key-value. 键 - 值 字典 json 你用过吗,你看像不像呢?

其实你可以把这样的 k-v pair 当成属性啊,有何不可?别把 OO 的范式搞得太死板了,领会精神。

I think { } is a method .... So they are parameters ...

只有 method 没有 property 指的是方法调用的时候。你举的这个例子是通过字面量创建一个 Hash 对象,这个时候不涉及到方法还是属性。

irb(main):003:0> favorites = {:composer => "Brahms", :painter => "Van Gogh", :comedian => "Groucho"}
=> {:composer=>"Brahms", :painter=>"Van Gogh", :comedian=>"Groucho"}
irb(main):004:0> favorites.class
=> Hash
irb(main):005:0> favorites[:composer]
=> "Brahms"
irb(main):006:0> :composer.class
=> Symbol
irb(main):007:0> 
需要 登录 后方可回复, 如果你还没有账号请 注册新账号