我第一次尝试学习
Ruby是两年前,现在我又开始了.我停止的原因是因为我不明白Symbol类.而现在我又在同一点,完全失去了什么时候和为什么你使用符号.我已经阅读了Stackoverflow中的其他帖子以及Google Googled的几个解释.但我还不明白.
首先,我认为符号只是创建某种“命名常量”的一种方法,而不用像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?
我不能想到一个我想将数据从用户/网页转换为符号的情况(除了解析命令行选项,也许).主要是因为后果(曾经创造过的符号永远存在).