ruby - 符号有什么用?

听说两个同名的符号只创建一个内存区,但是两个内容相同的字符串创建两个内存区。

  • 符号有什么用?
  • 符号像变量吗?如果是这样,我如何为符号赋值?
  • 如果我只为具有相同名称的符号分配一次内存,我将如何处理这些符号?

最佳答案

好吧,所以误解可能源于此:

符号不是变量,它是一个值。像 9 是一个数字值。

一个符号是一个大致有点像字符串的值...它不是一个您可以更改的字符串...并且因为您无法更改它,我们可以使用快捷方式 -> 所有符号与相同的名称/值存储在相同的内存点(以节省空间)。

您将符号存储到变量中,或在某处使用该值 - 例如作为散列的键....这最后一个可能是符号最常见的用途之一。

你创建一个包含键值对的散列,例如:

thing_attrs = {:name => "My thing", :colour => "blue", :size => 6}
thing_attrs[:colour]  # 'blue'

在这个 has - 符号是,你可以使用任何对象作为键,但是符号很好用,因为它们使用英文单词,因此很容易理解你在做什么存储/获取...比说数字要好得多。想象一下你有:

thing_attrs = {0 => "My thing", 1 => "blue", 2 => 6}
thing_attrs[1] # => "blue"

记住属性 1 是颜色会很烦人而且很难……最好给出在阅读代码时可以阅读的名称。因此我们有两个选择:字符串或符号。

两者之间几乎没有区别。一个字符串肯定是可用的,例如:

thing_attrs = {"name" => "My thing", "colour" => "blue", "size" => 6}
thing_attrs["colour"]  # 'blue'

除了我们知道的……符号使用更少的内存。不会少很多,但在大型程序中足够少,随着时间的推移,您会注意到它。 因此,使用符号代替已成为 ruby​​ 标准。

https://stackoverflow.com/questions/38237378/

相关文章:

r - 如何在 R 中将一个字符列拆分为多个列

php - 在 Laravel 迁移中更改列类型的最佳方法是什么?

c# - 使用 Xamarin android 从 Asset 加载文件

bash - 在 byobu 选项卡中启动命令的脚本

ansible - 具有 SSH key 身份验证的用户如何在 Ansible 中拥有 sudo 权

android - JSONObject.put(string,string) 不工作

laravel - 仅在 Laravel 中公开某些授权路由

android - 完成其他 Activity 之前的所有 Activity

python - 找到坡度最陡的点 python

google-api - Google Classroom API 修改附件