分享 Ruby Symbol 简单介绍 (那些带着冒号的字符串)

dandananddada · 2015年06月01日 · 10545 次阅读

写在前面

对于从其他语言转型 Ruby 的朋友来说,见到:myname这种形式的变量多多少少有些措手不及,于是会感觉这是多么复杂的一种数据类型,从而产生不必要的心里负担。 其实 Symbol 是一种非常简单的 Object,这里我摘取 Steve Litt 一篇关于 Symbol 介绍的 Guide 分享给大家,方便初识 Symbol 的朋友尽可能的降低学习成本。 原文地址:http://www.troubleshooters.com/codecorn/ruby/symbols.htm

简要介绍

符号和字符串很相似,符号也是对象,一般作为名称标签来使用,用来表示方法等对象的名称。 符号能实现的功能大部分字符串也能实现,单散列键这样只是判断是否相等的处理,符号会比字符串更高效。 另外符号可以与字符串相互转化。

What do symbols look like?

Symbol 看起来像一个没有引号的字符串前加了个冒号:myname 当然你也可以用冒号加引号的形式声明带空格的 symbol。:'my name'or :"my name" Symbol 是不变的,不可以像其他变量一样对它进行赋值运算。比如这样的写法是错误的:myname = "Tom"。 相反 Symbol 可以作为值赋给其他变量比如mystring = :myname

What are symbols?

Symbol 是一个 object,但是他可以用 number 表示也可以用 string 表示,多数情况下 Symbol 是作为一个字符串展现的。 你可以用to_i方法将 symbol 转为 integer,也可以用to_s将 symbol 转为 string。 对一个 Symbol 的多次引用用的是同一个 Object,因此 Symbol 会节省内存。

puts :myvalue.object_id
puts :myvalue.object_id
puts "myvalue".object_id
puts "myvalue".object_id
#2625806
#2625806
#537872172
#537872152

Symbol 可以用来存储不变的值,可以把它当做常量使用。

What can symbols do for you?

Symbol 被用作来传递字符串信息attr_writer :length。 但是一般这些字符串在运行时是不会发生改变的,同时这些字符串也不需要 String 类的方法。 多数情况下你可以用字符串代替 Symbol,但是字符串会占用更多内存,可读性相比差一些。 当然当你强制一个字符串在运行期间不许改变的时候只能用 Symbol,不能用 String 代替。

Summary

Symbol 看起来是一个引号加字符串组成的 Symbol 可以看做事 number 也可以看做是 string Symbol 的字符部分就是它的名字 Symbol 在运行时无法修改 多少情况下你可以用 String 代替 Symbol Symbol 没有 String 类的方法 Symbol 的多次引用都是指向同一个 Symbol 比字符串更加节省内存 Symbol 能提高运行效率

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