这是我在我的二叉树中创建节点的Node类。
# This class creates node.
class Node
attr_accessor :value,:left,:right,:random
def initialize(value,left,right)
@value = value
@left = left
@right = right
@random = ["left","right"].sample
puts "\nNode with value #{@value} is created".green
end
end
下面的代码是我的二叉树创建代码
的一行current.left = Node.new(val,nil,nil)
但是,我想要随机选择current.left
或current.right
,而不是使用left
或right
。因此,我尝试创建随机属性@random = ["left","right"].sample
并将其用作current.random = Node.new(val,nil,nil)
。但这显然不起作用。任何人都可以指导我如何处理这个问题。
答案 0 :(得分:1)
您可以使用send
prop_name = ["left","right"].sample
prop_value = Node.new(val,nil,nil)
current.send("#{prop_name}=",prop_value)
或更简单
current.send("#{['left','right'].sample}=", Node.new(val,nil,nil))
答案 1 :(得分:0)
通过此实现,将存储随机数(0或1),分别代表left
和right
。您也可以调用reset_random_method
重新滚动随机方法指向的位置。
class Node
attr_accessor :value, :left, :right
def initialize(value, left = nil, right = nil)
self.value = value
self.left = left
self.right = right
reset_random_method
end
def reset_random_method
self.random_number = rand 2
end
def random
send([:left, :right][random_number])
end
def random=(value)
send([:left=, :right=][random_number], value)
end
private
attr_accessor :random_number
end