遍历数组和 return 本身

Iterate through array and return itself

此代码:p [1, 2].each{ "foo" } 生成 nil,而我希望它在迭代后放置 [1, 2]。 Crystal?

中的操作方法

使用tap:

p [1, 2].tap &.each { "foo" } # => [1, 2]

它让出自己给块,然后 returns 自己。

另一种选择 (不可取) 可能是创建一个自定义方法,在完成每个操作后 returns 自我:

class Array
  def each_with_self
    each { |x| yield x  }
    self
  end
end

p [1, 2].each_with_self { "foo" } # => [1, 2]

对于您要求的情况,在 p(..) 中使用括号可能就足够了,因为 p return 作为结果的参数。

p([1, 2]).each{ "foo" }

p 的这种行为用于在表达式中间进行简单的检查,即将 foo(bar, baz) 更改为 foo(p(bar), baz)

至于 #each,在 crystal 中决定 return nil 改进生成的代码,因为该值大部分时间不被使用。这也防止了在一天结束时产生一些联合。