2014-02-12 4 views
0

다른 클래스를 반환하려면 클래스가 필요하지만 그렇게하지는 마십시오. 왜 그런지 설명해 주시겠습니까? 여기 나는 그 것이 부적절하다고 생각하므로 Temperature 클래스를 포함하지 않습니다.클래스 및 클래스 반환 변수

class Celsius 
    attr_accessor :temp 
    def initialize(cel) 
    return Temperature.new({:c =>cel}) 
    end 
end 

class Fahrenheit 
    def initialize (far) 
    Temperature.new({:f => far}) 
    end 
end 

나는 내가 return를 사용하려하지만 도움이되지 않았다, Celsius에서 Temperature 클래스를

puts Fahrenheit.new(0) #=> returns Fahrenheit class instead of Temperature 

를 반환 할 Fahrenheit 클래스를 호출하고 싶습니다. ::new consctuctor이 Temperature을 지정된 클래스의 새로 생성 된 인스턴스를 반환하기 때문에 대신 온도의

+0

(!) 참고 부탁했다 : 당신은 왜'화씨 :: Temperature'을하지? – rlecaro2

+0

[this] (http://stackoverflow.com/questions/21663548/ruby-instance-methods-and-variables/21667363) 질문 후에도 여전히 혼란스러워합니다. 당신은 * 클래스 *를 반환하려고하지 않고, 다른 클래스의 인스턴스 *를 반환하려고합니다. 큰 차이가 있습니다. – Max

+0

어떻게 불리나요? – Grag808

답변

1

initialize의 반환 값은 어떤 식 으로든 new에 의해 사용되지 않으므로 initialize에서 반환하는 것은 아무런 도움이되지 않습니다. Foo.newFoo이 아닌 다른 것으로 반환하는 유일한 방법은 new을 직접 무시하는 것이지만 코드 판독기가 매우 혼란 스럽기 때문에 일반적으로 바람직하지 않습니다.

섭씨와 화씨 클래스의 인스턴스를 만들 의도가 없다면, 처음에는 클래스가 아니어야합니다. 이 경우에는 Temperature 클래스에 클래스 메서드가 celsiusfahrenheit 인 경우 나에게 가장 현명한 것으로 보입니다.

+0

잘 문제는 섭씨와 화씨를 만들어야한다는 것입니다.몇 가지 연습 연습을하려고합니다. :/이와 같이 단순한 무언가가 진행을 방해한다는 것을 귀찮게 느끼십시오./ – Grag808

+0

당신은 올바른 방향으로 나를 잡았습니다! 이것은 내가 어떻게 작성한 것입니까> '' – Grag808

+0

당신은 올바른 방향으로 나를 잡았습니다! 이 내가> '클래스 섭씨을 쓴 어떻게 def.self.new (CEL) 반환 Temperature.new ({: C => CEL}) 끝 end' – Grag808

2

화씨 클래스는

이 올바른 것입니다. 그러나 #initialize은 실제로 클래스 생성자가 아니며 단지 초기화 콜백 메소드입니다. 계획에

far = Fahrenheit.new(0) 
far.to_C# => Celsius 

Fahrenheit 클래스 :

다음과 같은 방식을 사용할 수 있습니다

class Fahrenheit 
    def initialize(far) 
     @temp = far 
    end 

    def to_c 
     Celsius.new @temp 
    end 
end 

단지에서 Fahrenheit을 상속, 클래스가 Temperature 클래스에 속하는지 여부를 감지하기 위해 다음과 같이 확인하십시오.

class Fahrenheit < Temperature 
end 

far = Fahrenheit.new 
far.is_a?(Temperature) 
# => true 
+0

@sawa AYBABTU는 무엇입니까? =) –

+0

인터넷에서 쉽게 검색 할 수 있습니다. 할 수 없다면, "당신의 모든 기반이 우리에게 속한"것을 찾으십시오. – sawa

+0

@ sawa 좋습니다.하지만이 문맥에서 무엇을 의미합니까? –

0

결과 코드를 표시하기 만하면됩니다. 그래서 간단하지만 여전히 내가 :)

class Celsius 
    def.self.new(cel) 
     return Temperature.new({:c => cel}) 
    end 
end