Ruby on Rails-:符号,@ iVars和“字符串” - 哦,我的!

时间:2010-06-08 17:51:43

标签: ruby-on-rails ruby string symbols instance-variables

Rails的新手,并试图了解/为何在框架内使用:symbols@ivars"strings"

我认为我从概念上理解它们之间的差异

  • 每个项目只有一个:symbol个实例
  • 每个实例@ivar
  • 多个"strings" - 因为只要引用(?)
  • 就会创建它们

随意纠正我!

主要的困惑来自于理解规则& Rails期望的约定 - 在哪里以及为什么?

我确定有一个“啊哈!”那一刻即将到来,但我还没有......因为它对我来说似乎很随意(来自C / Obj-C)。

-thx

5 个答案:

答案 0 :(得分:15)

@instance_variable是一个实例变量。它通常在控制器中定义,并在视图中可访问。

"string"是一个字符串,与任何其他语言一样。

:symbol,就像你提到的那样,它是表示名字和字符串的有效方式;它们是文字价值。它被初始化并且在ruby会话期间仅存在一次。它不是字符串,因为您无法访问String方法;这是一个符号。最重要的是,它是不可改变的。由于这些原因,在哈希中表示键变得非常方便。 Rails方法使用哈希,因此,你可以在Rails中找到符号。

答案 1 :(得分:4)

实例变量非常简单:它们跟踪特定实例的属性/值,因此当值在实例之间变化时使用它们。

符号与字符串相比更加随意。符号通常用于常量值,这与C等语言使用枚举的方式大致相同; Ruby没有枚举,因此通常使用符号来填补这个空白。字符串用于更多不同的文本片段,不会用作标志或类似的常量。

答案 2 :(得分:4)

符号有点像指针(不是以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帮助。祝你好运!#/ p>

答案 3 :(得分:1)

实例变量与字符串和符号实际上不属于同一个列表。字符串和符号是类的类型,而实例变量是类型的变量。因此,实例变量(@var)只是在一个类的一个实例的方法之间存储值的一种方法:

class Calculator
  @counter = 0

  def inc
    @counter += 1
  end

  def dec
    @counter -= 1
  end
end

Here是关于符号和字符串之间区别的好文章。

答案 4 :(得分:-1)

Rails控制器通过ORM(对象关系映射)模型访问rails数据库,即Model类将映射到其对应的表,Objects直接映射到表中的行。为了获得给定用户查询的结果,实例变量(@instance_variable)是处理它的最佳选择。