2012-06-21 2 views
0

다음 코드를 저장하고 두 번째 초기화 코드를 호출하는 방법은 무엇입니까?Ruby에서 다른 이니셜 라이저를 호출하는 방법은 무엇입니까?

class DataStream 

    attr_reader :asset 
    attr_reader :data 

    def initialize(asset) 
    @asset = asset 
    @data = Array.new 
    end 

    def initialize(asset, values) 
    @asset = asset 
    @data = Array.new 
    values.each do |value| 
     add_value(value) 
    end 
    end 

end 
+1

, 당신은 IRB에 끝에'end'을 넣을 수 있습니다? 또한, 보통 ('attr_reader'와'def' 전에 두 칸,'each' 블럭에 두 칸 밖에 안되는 곳) 들여 쓰기하면 코드를 읽는 것이 더 쉽습니다. http://meta.stackexchange.com/a/128558/38765 –

+1

@AndrewGrimm 확인. 그리고 끝났어. –

답변

2

를 사용하여 기본 인자 :

def initialize(asset, values = []) 
    @asset = asset 
    @data = Array.new 
    values.each do |value| 
    add_value(value) 
    end 
end 
3

당신은 당신이 한 경우 방법을 재정의처럼, 마지막 하나는, 뭔가를 개최, 같은 이름을 가진 두 개의 방법을 정의 할 수 없습니다.

당신은 같은 선택적 매개 변수를 사용할 수 있습니다

def initialize(asset, values = nil) 
    @asset = asset 
    @data = Array.new 
    values.each do |value| 
     add_value(value) 
    end if values 
end 
1

방법에 대해 :

class DataStream 
    attr_reader :asset 
    attr_reader :data 
    def initialize(asset, values=nil) 
    @asset=asset 
    @data = Array.new 
    values.each{|v| add_value(v)} unless values.nil? 
    end 
end 
1

당신이 경고를 사용하는 경우, 루비는 당신이를 재정의 말할 것이다 기존 방법이므로 더 이상 사용할 수 없습니다.

,210
$VERBOSE = true 
class DataStream 

    attr_reader :asset 
    attr_reader :data 

    def initialize(asset) 
    @asset = asset 
    @data = Array.new 
    end 

    def initialize(asset, values) 
    @asset = asset 
    @data = Array.new 
    values.each do |value| 
     add_value(value) 
    end 
    end 
end 

우리는 복사하여 예를 붙여 넣을 수 있도록-이기 때문에 앞으로

(irb):12: warning: method redefined; discarding old initialize 
(irb):7: warning: previous definition of initialize was here