猿问

对于Ruby中的块,执行。对比花括号

我有一个同事正在积极地试图说服我不要使用do..end而是使用花括号来定义Ruby中的多行块。


我坚定地只使用花括号作为短单线,并且做其他事情。但我想我会联系更大的社区来获得一些解决方案。


那是哪个,为什么?(一些应该代码的示例)


context do

  setup { do_some_setup() }

  should "do somthing" do

    # some more code...

  end

end

要么


context {

  setup { do_some_setup() }

  should("do somthing") {

    # some more code...

  }

}

就个人而言,只看上面的问题就可以解答我的问题,但我想向更大的社区开放。


慕妹3242003
浏览 710回答 3
3回答

元芳怎么了

一般约定是将do..end用于单行块和大括号的花括号,但是这两个例子之间也有区别,可以用这个例子说明:puts [1,2,3].map{ |k| k+1 }234=> nilputs [1,2,3].map do |k| k+1; end#<Enumerator:0x0000010a06d140>=> nil这意味着{}具有比do..end更高的优先级,因此在决定要使用的内容时请记住这一点。PS:在开发偏好时要记住的另一个例子。以下代码:task :rake => pre_rake_task do&nbsp; somethingend真正意思:task(:rake => pre_rake_task){ something }这段代码:task :rake => pre_rake_task {&nbsp; something}真正意思:task :rake => (pre_rake_task { something })因此,要获得您想要的实际定义,使用花括号,您必须执行以下操作:task(:rake => pre_rake_task) {&nbsp; something}也许使用大括号作为参数是你想要做的事情,但如果你不这样做,最好在这些情况下使用do..end来避免这种混乱。

慕村9548890

来自编程Ruby:大括号具有很高的优先级; 确实有一个低优先级。如果方法调用具有未括在括号中的参数,则块的大括号形式将绑定到最后一个参数,而不是整个调用。do表单将绑定到调用。所以代码f param {do_something()}param在代码中将块绑定到变量f param do do_something() end将块绑定到函数f。但是,如果将函数参数括在括号中,则这不是问题。

慕无忌1623718

我投票支持do / end该惯例适用do .. end于多线和{ ... }单线。但是我喜欢do .. end更好,所以当我有一个衬垫时,do .. end无论如何都会使用它,但是像往常一样将它格式化为三行中的do / end。这让每个人都开心。&nbsp; 10.times do&nbsp;&nbsp; &nbsp; puts ...&nbsp; end一个问题{ }是它是诗歌模式 - 敌对(因为它们紧紧地绑定到最后一个参数,而不是整个方法调用,所以你必须包括方法parens),在我看来,它们看起来并不那么好看。它们不是语句组,它们与哈希常量冲突以便于阅读。另外,我已经{ }在C程序中看到了足够的内容。像往常一样,Ruby的方式更好。只有一种类型的if块,您永远不必返回并将语句转换为复合语句。
随时随地看视频慕课网APP

相关分类

Ruby
我要回答