2014-09-27 2 views
1

내 클래스 생성자가 변수에 값을 전달하거나 클래스가 그렇게하도록 허용하는 방법을 알아 내려고합니다.생성자 인수에 기본값을 사용하는 방법은 무엇입니까?

내 클래스는 Graph이고 인스턴스 변수는 @nodes입니다. Graph.new() (@nodes = []) 또는 Graph.new(list_of_nodes) (@nodes = list_of_nodes)을 지정하고 싶습니다.

이것이 가능합니까 아니면 두 개의 별도 생성자를 만들어야합니까?

답변

3

별도의 생성자를 두 개 작성할 수 없습니다. 루비에는 함수 오버로딩이 필요하지 않으므로 (루비가 필요하지 않기 때문에) 루비에 오버로드가 없습니다. 당신은 PARAM의 기본을 설정할 수 있습니다

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] 
2

BroiSatse의 대답의 더 루비 관용적 버전 :

class Graph 
    attr_reader :nodes 

    def initialize (*nodes) 
    @nodes = nodes 
    end 
end 

Graph.new.nodes # => [] 
Graph.new(:node1, :node2).nodes # => [:node1, :node2] 

attr_reader :nodesdef nodes() @nodes end의 더 관용적 동일합니다.

"나머지 인수"*nodes을 사용하면 []은 인수가 제공되지 않은 경우 @nodes에 할당됩니다. 또한 인수 목록에서 대괄호를 생략 할 수도 있습니다.

관련 문제