2012-10-02 36 views
1

可能重复:
In Ruby, what are the vertical lines?什么| f |在Ruby中做?

这个问题似乎是谷歌,防潮,我不知道红宝石。

比较|f|在模型描述中行尾的不同存在会导致内容不被显示。我只是试图修复一个页面中的错误,该错误不能访问表中的某些信息。

What does ||= do in Ruby”关于||似乎没有帮助。

下面是从破碎的.rb文件中的可疑代码:

comma :show_mytable do |f| 
    table2 :field2 
    table3 :field3 
end 

但这似乎工作,呈现出启动时所需的字段:

comma :show_mytable do 
    table2 :field2 
    table3 :field3 
end 

|f|防止显示输出?

+1

| f |是从组逗号取得每个实例的变量,除非您在do..end循环中使用它,否则它不会做任何更改。例如,如果您需要访问特定的逗号实例的属性值,则可以使用f.attributename,其他明智的| f |没有区别。我也是新来的铁轨,我认为有比这更多的东西.. – user1455116

+1

可以使用SymbolHound而不是谷歌进行这种搜索:http://symbolhound.com/?q=Ruby+%7Cf%7C – philant

回答

5

在您的代码中,您将两个变量传递给comma方法。第一个是名为:show_mytable的符号,第二个是块。它与条件赋值|| =语法无关。

下面是如何块红宝石中使用的示例:

array = [1, 2, 3, 4] 
array.each do |element| 
    element + 1 
end 
    #=> 2 3 4 5 

当使用循环(each在这种情况下),则可以将它传递一个变量(element)以便为用户的方式来引用循环中的当前元素。

您还可以使用大括号代替doend这样的:

array = [1, 2, 3, 4] 
array.each { |e| e + 1 } 
    #=> 2 3 4 5 

既然你不通过任何循环在这里我看不出有任何理由,你可以需要在你的例子中|f|

2

|f|是您的块的参数。用这几行你可以用两个参数调用叫做comma的方法。第一个是符号:show_mytable,第二个是您在doend之间的区块。

使用管道之间的变量名列表,您可以指定块的参数列表。一个块就像一个匿名函数,它可以用任意数量的参数调用,ruby会尽量与它们匹配。