Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails-:符号、@iVars和;字符串";-天哪!_Ruby On Rails_Ruby_String_Symbols_Instance Variables - Fatal编程技术网

Ruby on rails RubyonRails-:符号、@iVars和;字符串";-天哪!

Ruby on rails RubyonRails-:符号、@iVars和;字符串";-天哪!,ruby-on-rails,ruby,string,symbols,instance-variables,Ruby On Rails,Ruby,String,Symbols,Instance Variables,刚接触Rails,正在尝试了解何时/为什么在框架内使用:symbols,@ivars,“strings” 我想我从概念上理解了它们之间的区别 每个项目只有一个:symbol实例 每个实例一个@ivar 多个“字符串”-只要引用(?) 请随意纠正我 主要的困惑来自于对Rails期望的规则和约定的理解-在哪里以及为什么 我确信有一个“啊哈!”的时刻即将到来,但我还没有经历过……因为它对我来说似乎相当随意(来自C/Obj-C) -thx实例变量非常简单:它们跟踪特定实例的属性/值,因此当您在实例之

刚接触Rails,正在尝试了解何时/为什么在框架内使用
:symbols
@ivars
“strings”

我想我从概念上理解了它们之间的区别

  • 每个项目只有一个
    :symbol
    实例
  • 每个实例一个
    @ivar
  • 多个
    “字符串”
    -只要引用(?)
请随意纠正我

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

我确信有一个“啊哈!”的时刻即将到来,但我还没有经历过……因为它对我来说似乎相当随意(来自C/Obj-C)


-thx

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


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

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

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


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

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

class Calculator
  @counter = 0

  def inc
    @counter += 1
  end

  def dec
    @counter -= 1
  end
end

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

符号有点像指针(不是用C语言的方式,而是用C语言的思维方式,它们指向)。嗯,在处理属性时使用符号。如果你问我的话,它们是动态输入的最大好处之一。(对于潜在的选民,我并不想伤害他们,我知道他们不是指路人,但对我来说感觉‘啊哈!’

当您从模型中获取数据并且希望在视图中(在控制器方法中)使用它们时,需要实例变量

def my_controller_方法
@myposts=Post.find(:all)
结束
#内部视图

只是提醒一下,每个版本的规则和惯例都有很大的变化(正如我在Rails之旅中发现的那样)。使用正确的导轨和正确的导轨会有所帮助。祝你编码好运

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

Ah,散列和
:符号之间的关系有意义(+1)。我仍然看到字符串、符号和IVAR在某种程度上可以互换地传递给方法?!?也许在我完成这项工作时,模式会变得清晰…在freenode上加入#rubyonrails会有很大帮助,它确实帮助我更快地理解Rails。这个答案与这个问题有什么关系?
:action => "index"
def my_controller_method
@myposts = Post.find(:all)
end

# inside view
<% for @myposts do |m| %>
<i><%= m.title %></i>
<% end %>