首先,我认为符号只是创建某种“命名常量”的一种方法,而不用像Java那样进行相同的过程.
:all
而不是使用任意值做一个常量public static final String ALL = 8;
然而,当您在例如使用它时并不太有意义. attr_accessor:first_name等
符号只是一个轻量级的String类吗?我有理解在我自己的类和框架中如何解释,何时以及如何使用符号.
解决方法
您不应该将它们用作数据处理任务中的不可变字符串(请记住,创建符号后,不能被破坏).你通常使用符号来命名事物.
# typical use cases # access hash value user = User.find(params[:id]) # name something attr_accessor :first_name # set hash value in opts parameter db.collection.update(query,update,multi: true,upsert: true)
我们先来看一下params [:id]的例子.在一个适度的大型轨道应用程序中,可能会有数以百计的分散在代码库中.如果我们使用一个字符串params [“id”]来访问这个值,这意味着每次都会有新的字符串分配(之后需要收集该字符串).在符号的情况下,它实际上是相同的符号无处不在.更少的内存分配器,垃圾收集器甚至你的工作(:比“”快)
如果你有一个简单的单字字符串,经常出现在你的代码中,你不会做一些有趣的事情(插值,gsub,upcase等),那么可能是一个很好的候选人.
However,does this apply only to text that is used as part of the actual program logic such as naming,not text that you get while actually running the program…such as text from the user/web etc?
我不能想到一个我想将数据从用户/网页转换为符号的情况(除了解析命令行选项,也许).主要是因为后果(曾经创造过的符号永远存在).
此外,许多编辑器为符号提供不同的着色,以便在代码中突出显示它们.看看这个例子
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。