Ruby学习(1) – Symbol(符号)总结

在Ruby的学习过程中应该不乏接触到Symbol,就是以冒号开头的变量名如 :tems_of_service,特别是在Rails中,更是大量使用Symbol。

这不乏让初学者感觉有些疑惑,疑惑的是Symbol有什么作用,什么时候使用Symbol才是正确的?以下根据最近学习的体会进行总结。

1、什么是Symbol

Jim Weirich:Symbol是有名字的对象

Austin Ziegler:An object that is a name

2、Symbol和字符串

Symbol和字符串的主要区别在于,内存的存储方式上。

符号 :a_symbol在多次使中引用的是同一个内存地址。

而字符串 “a_string”在多次使用中指向的是不同的内存地址,即每次都生成一个新的对象。

Symbol和字符串是可以相互转换的,一般来说使用Symbol的地方使用字符串来代替都是合法的。

可以通过以下方法进行转换:

:a_symbol.to_s #=>"a_symbol"

:a_symbol.id2name #=>"a_symbol"

"a_string".to_sym #=>:a_string

"a_string".intern # =>:a_string

3、Symbol的作用

第一是 节省内存的用量,提高性能

特别对于Rails如果不适用Symbol,某一个字符串可能会被使用很多次,在大访问量情况下节省的资源还是不可忽视的。

另外对于hash对象,如果使用Symbol也可以提高效率,因为使用字符串必须每次计算字符串的hash。

第二是 易读性

它使得语言的理解更加自然,如attr_accessor :a_name 我们很容易理解Ruby将生成一个以a_name为名字的访问器。

4、什么时候使用Symbol

引用Ruby黑客Jim Weirich的两句话:

如果对象的内容(字符创序列)总要,那么使用字符串。

如果对象的一致性重要,那么使用符号。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>