我有时希望标准库中有类似的功能。例如,名称可以是with
或with_it
(用新名称重复以前的代码)
class Object
def with_it(&block)
block.call(self)
end
end
示例用法:
x = [1, 2, 3, 4, 5].map {|x| x * x }.with_it do |list|
head = list.unshift
list << head * 10
list.join " / "
end
相对于:
list = [1, 2, 3, 4, 5].map {|x| x * x }
head = list.unshift
list << head * 10
x = list.join " / "
虽然后者更容易理解,但前者的好处是保持变量list
和head
范围,并且x
在我看来分配更清晰(必须将分配x
插入到代码的最后一行)。如果代码是更大方法的一部分,范围界定将是一个好处。
因此,使用的另一种选择with_it
是将代码放在单独的方法中。例如:
def mult_head_and_join(list)
head = list.unshift
list << head * 10
list.join " / "
end
x = mult_head_and_join [1, 2, 3, 4, 5].map {|x| x * x }
不知道在这里结束什么,但我想我会投票支持将 with_it 包含在标准库中