我试图弄清楚如何让我的类构造函数允许用户传入变量的值,或者只是让类来做。
我的班级Graph
有一个实例变量@nodes
。我想拨打Graph.new()
分配@nodes = []
或Graph.new(list_of_nodes)
分配@nodes = list_of_nodes
。
这是可能的,还是我应该只创建两个独立的构造函数?
答案 0 :(得分:3)
你不能写两个单独的构造函数 - ruby中没有函数重载(因为它不需要)。您可以设置参数的默认值:
class Graph
def initialize(list_of_nodes = [])
@nodes = list_of_nodes
end
def nodes
@nodes
end
end
Graph.new.nodes #=> []
Graph.new([:node]).nodes #=> [:node]
答案 1 :(得分:2)
BroiSatse的答案更多Ruby-idiomatic版本:
class Graph
attr_reader :nodes
def initialize (*nodes)
@nodes = nodes
end
end
Graph.new.nodes # => []
Graph.new(:node1, :node2).nodes # => [:node1, :node2]
attr_reader :nodes
更像是def nodes() @nodes end
的惯用语。
使用“rest arg”*nodes
时,如果没有给出参数,[]
将被分配给@nodes
。它还允许您从参数列表中省略括号。