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

|format|人在做什么?这些管道符号在PHP/Java中的等效语法是什么?

推荐答案

它们是屈服于区块的变量.

def this_method_takes_a_block
  yield(5)
end

this_method_takes_a_block do |num|
  puts num
end

输出"5".一个更神秘的例子:

def this_silly_method_too(num)
  yield(num + 5)
end

this_silly_method_too(3) do |wtf|
  puts wtf + 1
end

输出为"9".

Ruby相关问答推荐

清理 jruby 中输入数据的编码错误

将数组转换为哈希,其中键是索引

什么是 '?-mix' 在 Ruby 正则表达式中

从 Time 对象获取下/上个月

Ruby 中的发送方法

判断字符串是否包含Ruby数组中的任何子字符串

如何用 Ruby 覆盖 shell 中的打印行?

Ruby 中的 -> (stab) 运算符是什么?

如何仅从 Gemfile 中查看依赖关系树?

用零填充数字

覆盖子类中的 ruby​​ 常量,以便继承的方法使用新常量而不是旧常量?

rails 控制台、RVM 和 readline 的问题

带有可选参数的方法

使用 `?`(问号)在 Ruby 中获取 ASCII 字符代码失败

Ruby 将标题发布到 slug

Ruby on rails - 静态方法

如何在 Ruby 中重命名文件?

如何在 Ruby 中读取整个文件?

Ruby 中的Monkey Patching到底是什么意思?

类变量上的 attr_accessor