我一直在寻找类似的问题,但无法找到解决这种情况下:PROC设置为默认方法参数
我有这个类:
class BinarySearchTree
....
find_work_node = Proc.new do |value, node, method|
return if node.nil?
if value == node.value
node = self.send(method node)
elsif value < node.value
node.left = find_work_node.call(value, node.left, method)
elsif
node.right = find_work_node.call(value, node.right, method)
end
node
end
# Delete a specific value from the tree
def delete(value, node = @root, block = find_work_node)
block.call(value, node, :delete_node)
end
....
end
当我打电话我delete
方法,出现这样的错误:
undefined local variable or method `find_work_node' for #<BinarySearchTree:0x00000001018708> (NameError)
我怎样才能在delete
方法设置为默认参数的PROC find_work_node
?
由于class_var的值不会改变,所以我推荐使用常量。一般来说,使用更受约束的结构更好,因为它更准确地传达了意图和使用。 –
@KeithBennett我同意,但它确实取决于用例。从问题中不清楚是否存在默认参数的可变性意图。可以认为,由于首先使用了一个变量,并且因为这是一个参数,而参数本身是可变的,所以也可以允许突变默认值。但是我也可以看到论证的另一面。然而,最初的问题是范围,而不是可变性的问题,因此任何解决范围问题的答案都是有效的IMO – Rado
同意。我从来没有打算表示你的回答是不正确的。 –