遍历数组和 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
改进生成的代码,因为该值大部分时间不被使用。这也防止了在一天结束时产生一些联合。
此代码: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
改进生成的代码,因为该值大部分时间不被使用。这也防止了在一天结束时产生一些联合。