gpt4 book ai didi

ruby-on-rails - do..end 与 Ruby 中 block 的花括号

转载 作者:数据小太阳 更新时间:2023-10-29 06:17:12 24 4
gpt4 key购买 nike

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

我坚定地坚持只对短的单行代码使用大括号,对其他一切都使用 do..end。但我想我会接触更大的社区以获得一些解决方案。

那么它是什么,为什么? (一些shoulda代码的例子)

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...
}
}

就我个人而言,仅看上面的内容就可以回答我的问题,但我想向更大的社区开放这个问题。

最佳答案

一般惯例是对多行 block 使用 do..end,对单行 block 使用花括号,但两者之间也有区别,可以用这个例子来说明:

puts [1,2,3].map{ |k| k+1 }
2
3
4
=> nil
puts [1,2,3].map do |k| k+1; end
#<Enumerator:0x0000010a06d140>
=> nil

这意味着 {} 的优先级高于 do..end,因此在决定要使用什么时请记住这一点。

在您形成偏好时要牢记的另一个例子。

以下代码:

task :rake => pre_rake_task do
something
end

真正的意思是:

task(:rake => pre_rake_task){ something }

还有这段代码:

task :rake => pre_rake_task {
something
}

真正的意思是:

task :rake => (pre_rake_task { something })

因此,要使用大括号获得您想要的实际定义,您必须执行以下操作:

task(:rake => pre_rake_task) {
something
}

也许您无论如何都想为参数使用大括号,但如果您不这样做,最好在这些情况下使用 do..end 以避免这种混淆。

关于ruby-on-rails - do..end 与 Ruby 中 block 的花括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5587264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com