Ruby中的管道符号是什么?
我正在学习Ruby和RoR,来自PHP和Java背景,但我不断遇到这样的代码:
def new
@post = Post.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @post }
end
end
Run Code Online (Sandbox Code Playgroud)
这|format|部分在做什么?PHP/Java中这些管道符号的等效语法是什么?
Aug*_*aas 53
它们是产生块的变量.
def this_method_takes_a_block
yield(5)
end
this_method_takes_a_block do |num|
puts num
end
Run Code Online (Sandbox Code Playgroud)
哪个输出"5".一个更神秘的例子:
def this_silly_method_too(num)
yield(num + 5)
end
this_silly_method_too(3) do |wtf|
puts wtf + 1
end
Run Code Online (Sandbox Code Playgroud)
输出为"9".
Mar*_*son 32
起初这对我来说也很奇怪,但我希望这个解释/ walkthru可以帮助你.
文档以一种非常好的方式触及了主题 - 如果我的答案没有帮助,我相信他们的指南会.
首先,通过键入irbshell并点击来启动Interactive Ruby解释器Enter.
输入类似的内容:
the_numbers = ['ett','tva','tre','fyra','fem'] # congratulations! You now know how to count to five in Swedish.
Run Code Online (Sandbox Code Playgroud)
只是为了让我们有一个阵列可以玩.然后我们创建循环:
the_numbers.each do |linustorvalds|
puts linustorvalds
end
Run Code Online (Sandbox Code Playgroud)
它将输出所有数字,以换行符分隔.
在其他语言中,你必须写下这样的东西:
for (i = 0; i < the_numbers.length; i++) {
linustorvalds = the_numbers[i]
print linustorvalds;
}
Run Code Online (Sandbox Code Playgroud)
需要注意的重要事项是,|thing_inside_the_pipes|只要您始终如一地使用它,它就可以是任何东西.并且理解它是我们正在谈论的循环,这是我直到后来才得到的东西.
@names.each do |name|
puts "Hello #{name}!"
end
Run Code Online (Sandbox Code Playgroud)
在http://www.ruby-lang.org/en/documentation/quickstart/4/附有此解释:
each是接受一个代码块的方法然后运行的代码用于在列表中的每个元素块之间,以及在比特do和end就是这样一个块.块就像匿名函数或lambda.管道字符之间的变量是此块的参数.这里发生的是,对于列表中的每个条目,
name绑定到该列表元素,然后puts "Hello #{name}!"使用该名称运行表达式.
| 归档时间: |
|
| 查看次数: |
31085 次 |
| 最近记录: |