Rails 新手,试图弄清楚何时/为什么在框架内使用:symbols
, @ivars
, 。"strings"
我想我从概念上理解它们之间的区别
- 每个项目只有一个
:symbol
实例 @ivar
每个实例一个- 多个
"strings"
- 因为它们是在被引用时创建的(?)
随时纠正我!
主要的困惑来自于理解Rails 期望的规则和约定——在哪里以及为什么?
我敢肯定有一个“啊哈!” 时刻即将到来,但我还没有……因为这对我来说似乎很随意(来自 C/Obj-C)。
-谢谢
Rails 新手,试图弄清楚何时/为什么在框架内使用:symbols
, @ivars
, 。"strings"
我想我从概念上理解它们之间的区别
:symbol
实例@ivar
每个实例一个"strings"
- 因为它们是在被引用时创建的(?)随时纠正我!
主要的困惑来自于理解Rails 期望的规则和约定——在哪里以及为什么?
我敢肯定有一个“啊哈!” 时刻即将到来,但我还没有……因为这对我来说似乎很随意(来自 C/Obj-C)。
-谢谢
是@instance_variable
一个实例变量。它通常在控制器中定义并在视图中访问。
The"string"
是一个字符串,就像在任何其他语言中一样。
,:symbol
正如您所提到的,它是一种表示名称和字符串的有效方式;它们是文字值。它在 ruby 会话期间被初始化并且只存在一次。它不是字符串,因为您无权访问 String 方法;这是一个符号。最重要的是,它是不可变的。由于这些原因,它在表示散列中的键时变得非常方便。Rails 方法使用散列,因此,在 Rails 中随处可见符号。
实例变量非常简单:它们跟踪特定实例的属性/值,因此当您的值因实例而异时,您可以使用它们。
符号与字符串比较随意。符号通常用于常量值,就像 C 语言使用枚举一样;Ruby 没有枚举,所以经常使用符号来填补这个空白。字符串用于更多不同的文本,这些文本不会用作标志或类似的常量。
符号有点像指针(不是以 C-ish 的方式,而是在 C-ish 的思维中,它们指向)。好吧,您在操作属性时使用符号。如果你问我,它们是动态类型的一大好处。(对于潜在的选民,我没有任何伤害的意思,我知道他们不是指针,但对我来说感觉是“啊哈!”)。
:action => "index"
当您从模型中获取数据并希望在您的视图中(在您的控制器方法内)使用它们时,需要实例变量。
def my_controller_method
@myposts = Post.find(:all)
end
# inside view
<% for @myposts do |m| %>
<i><%= m.title %></i>
<% end %>
提醒一下,每个版本的规则和约定都发生了很大变化(正如我在 Rails 之旅中发现的那样)。拥有正确的导轨和正确的 Rails 会有所帮助。祝你编码好运!
实例变量与字符串和符号并不真正属于同一个列表。字符串和符号是类的类型,而实例变量是变量的类型。所以实例变量 ( @var
) 只是在一个类的一个实例的方法之间存储值的一种方式:
class Calculator
@counter = 0
def inc
@counter += 1
end
def dec
@counter -= 1
end
end
这是一篇关于符号和字符串之间区别的好文章。
Rails控制器通过ORM(Object Relation Mapping)的Models访问rails数据库,即Model类将映射到其对应的表中,而Objects直接映射到表中的行。为了得到给定用户查询的结果,实例变量 (@instance_variable) 是处理它的完美选择。