繁体   English   中英

Ruby on Rails- :symbols、@iVars 和“字符串”-天哪!

[英]Ruby on Rails- :symbols, @iVars and “strings” - oh my!

@ivars Rails 并试图弄清楚何时/为什么在框架内使用:symbols@ivars"strings"

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

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

随时纠正我!

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

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

-谢谢

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

"string"是一个字符串,就像在任何其他语言中一样。

:symbol ,正如你所提到的,它是一种表示名称和字符串的有效方式; 它们是字面值。 它被初始化并且在 ruby​​ 会话期间只存在一次。 它不是字符串,因为您无权访问 String 方法; 这是一个符号。 最重要的是,它是不可变的。 出于这些原因,在散列中表示键变得非常方便。 Rails 方法使用散列,因此,您在 Rails 中到处都可以找到符号。

实例变量非常简单:它们跟踪特定实例的属性/值,因此当您的值因实例而异时,您可以使用它们。

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

符号有点像指针(不是在 C 语言中,而是在 C 语言思维中,它们指向)。 好吧,您在操作属性时会使用符号。 如果您问我,它们是动态类型的一大好处。 (对于潜在的选民,我没有任何伤害的意思,我知道它们不是指针,但对我来说感觉“啊哈!”)。

: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(对象关系映射)通过 Models 访问 rails 数据库,即 Model 类将映射到其对应的表,Objects 直接映射到表中的行。为了获取给定用户查询的结果,实例变量 (@instance_variable) 是处理它的完美选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM