无法理解轨道中符号的使用

时间:2016-08-22 18:00:10

标签: ruby-on-rails ruby

我无法理解在rails中使用符号。我知道在大多数情况下,符号只是某些东西(或字符串)的名称。例如:name => "John Doe", :email => "johndoe@gmail.com"。但是,在以下示例中,符号:post未在程序中的任何位置定义,但仍在使用中。 <%= form_for :post, url: posts_path do |f| %>:post符号与此相关联是什么?如何在铁轨上工作时看看符号?

2 个答案:

答案 0 :(得分:4)

符号不是“事物的名称”,它们与除自身之外的任何东西都没有关联。符号就是:符号。它将内部与唯一标识符相关联,但这是一个实现细节。

在这种情况下,符号:post没有任何作用,除了与form_for函数通信它应该在调用范围中查找名为post的变量并使用它来填充表格的字段。符号的符号表示用于帮助方法定位其变量并命名其字段,但符号:post不与代码中其他位置定义的任何内容相关联。

答案 1 :(得分:2)

在您的代码中使用:post,您已定义了:post符号,只要遇到新名称或通过{{1}手动将字符串转换为符号,就会自动创建这些符号}。

一般而言,与字符串相比,符号在频繁和重复使用时更有效。它们在某些描述中是“内化字符串”或“实习生”,在内部有效地添加到字典中。

to_sym是一个字符串,可能存在于代码中的许多地方,每个地方都可以是一个独立的字符串,并为其分配内存。将其中一个与另一个进行比较需要进行字符串比较。

另一方面,"post"总是引用同一个对象。这使得比较变得更加容易,而且内存只分配一次和一次。