Ruby中的括号仍然是可选的吗?

ABM*_*gil 2 ruby ruby-on-rails

如果我按照文档运行

a = [:code]
a.collect { |x| x.to_s } # => ["code"]
Run Code Online (Sandbox Code Playgroud)

但是,如果我跑

a = [:code]
a.collect({ |x| x.to_s }) # => SyntaxError
Run Code Online (Sandbox Code Playgroud)

据我所知,红宝石有可选的parens.我的语法怎么搞砸了?这对我来说是一个更大的问题,因为我想在这之后链接另一个函数,所以我需要parens.

nzi*_*nab 7

您没有将块作为参数传递给括号.

a.collect { |x| x.to_s }
Run Code Online (Sandbox Code Playgroud)

是相同的

a.collect() {|x| x.to_s }
Run Code Online (Sandbox Code Playgroud)

是相同的

a.collect() do |x|
  x.to_s
end
Run Code Online (Sandbox Code Playgroud)

所有这些都与此非常接近:

block = -> (x) {x.to_s}   # Shortcut 'stabby' syntax for lambda{|x| x.to_s}
a.collect(&block) # Or a.collect &block
Run Code Online (Sandbox Code Playgroud)

  • 哦,如果你想在之后链接另一个方法,你可以在块结束后添加一个`.`,它会正常工作.`a.collect {| x | 例如,x.to_s} .size`.如果你正在使用rails,你可以使用`a.collect(&:to_s)`而不是块:) (2认同)