如何使用构造函数参数的默认值?

时间:2014-09-27 23:10:21

标签: ruby constructor

我试图弄清楚如何让我的类构造函数允许用户传入变量的值,或者只是让类来做。

我的班级Graph有一个实例变量@nodes。我想拨打Graph.new()分配@nodes = []Graph.new(list_of_nodes)分配@nodes = list_of_nodes

这是可能的,还是我应该只创建两个独立的构造函数?

2 个答案:

答案 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。它还允许您从参数列表中省略括号。