Ruby block 如果只有一个参数能否省略,直接使用_ 表示。 向 Scala 类似

lilijreey · 2019年02月03日 · 最后由 ecnelises 回复于 2019年02月08日 · 720 次阅读
[1,2,3].map {|e| e+1}
[1,2,3].map {_+1} # 这样可以吗
共收到 10 条回复

不行 ,下划线在ruby里面代替可被忽略的参数,用来让你的代码更具有可读性 但是你可以


[1,2,3].map {|_| _+1}

[1,2,3].map(&:to_s)
lyb124553153 回复

to_s 有不是+1

话说有谁知道ruby为何不支持这种写法?

lilijreey 回复
to_s = lambda { |x| x + 1}
b = [1,2,3].map(&to_s)
p b

lyb124553153 回复

[1,2,3].map(&1.method(:+))

楼主又来抬杠了

mizuhashi 回复

这写法高级啊,之前的没见过。 这应该是通过柯里化来实现的吧。

不能。你的例子可以 .map &:succ

mizuhashi 回复

提问的智慧:

我在想能不能覆盖 method_missing 来实现一个这个

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