Ruby 菜鸟继续发问,问问&block

metal · 2012年02月27日 · 最后由 lainuo 回复于 2012年02月27日 · 5716 次阅读
def ruby_china(&block)
   puts block
end

这个 block 前面的符号是什么意思。。&这个符号是条件符号么?这样写有什么具体含义?

还有这个(他们两个 (&block,*args) 经常在一起好基友么?)

def ruby_china(*args)
  puts args
end

不过这个我似乎能够理解一些,出来是个数组。

我试着用最简单的方式回答你,呵呵。

首先,ruby 的方法可以接收参数,从某种角度说,参数类型至少分三种:普通参数,可变参数或者 block。Ruby 通过参数名的前缀来识别参数类型,"*" 对应的是可变参数,"&"对应的是 block。这个前缀是告诉 Ruby 解释器,如何去理解参数的类型,否则 Ruby 自己是不明白你这里的参数到底想要闹哪样的。

至于可变参数和 Block 的用法,请自行 Google 或者找 Ruby 语言的入门文档,呵呵。

block 是个可运行的代码片段,或干脆理解成函数,那*argv 不就是他的参数了吗,

#3 楼 @azhao 你确定你表达完整了嘛?你的句尾是一个“逗号”。这让我想到一个冷笑话:我最讨厌两种人,第一种人,话只说一半,

#4 楼 @lgn21st 这是做人留一半,说话收三分,

表示我还会回来的,

#6 楼 @azhao 问题是如果一个 method 同时带有 &block*args,但是这里的 *args 并不是 &block的参数呀,所以我真正纠结的是你写出的那部分到底是不是就是要表达这个意思,还是你没有写的那部分要表达的就是这个意思意啊。

请参考 The Ruby Programming Language Chapter 6.4.5 Block Arguments

我觉得这个问题不应该在这里问,这个问题你发帖的功夫应该就已经可以查到答案了,不是吗?

楼上的各位太乱了,还是 9 楼靠谱,顶标准答案!

@metal 建议你仔细的读一遍 双飞燕 或是 镐头书。定有很大收获 :>

需要 登录 后方可回复, 如果你还没有账号请 注册新账号