新手问题 Ruby 的块和 C/C++ 的块的区别

orangi · 2015年08月23日 · 最后由 yanguango 回复于 2015年08月24日 · 2016 次阅读

这个以前是学 C 语言起步的 所以有一些 C/C++ 的概念比较根深蒂固 所以上来咨询一下块的问题

在 C/C++ 里

void f(){
    int x=1;
    {
        x=2;
    }
    {
        x=3;
    }
}

我们可以这样区分多个块来进行对 x 的划分,而且在 C/C++ 里面,这样是允许的,也有很多这样的例子;但是在 Ruby 里面

def f
    x=1
    {
        x=2
    }
end

这样的写法是不允许的。在 Ruby 里面一个块必须得有一个方法来引导或者必须作为一个对象来保存

对于这点有点不明白

1 楼 已删除

C/C++ 的块是 Scope Ruby 的块是 Block 不是一个东西。

Ruby 的 Block,根据松本菊苣的说法,更类似于匿名函数,也就是类似于 C++ 里的 lambda 表达式。 例如:

a.each { |x| puts x }

相当于

for_each(begin(a), end(a), [](char* s) { puts(s); });

Ruby 的对应语法,begin...end,是不会像 C/C++ 那样打开新的 scope 的。

另外,花括号引出的代码会被解析成 Hash,而不是块,所以这里会报语法错误。

最后,Ruby 不提倡把方法写得很长。超过 20 行一般就要考虑拆分了。

#2 楼 @msg7086 原来如此 明白了

所以说看书不要看中文,你看 scopeblock 全部翻译成, 蒙了吧。

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