2014-01-14 2 views
0

다음과 같은 문제가 있습니다. 나는 method_A를 호출하는 객체 이름을 검사하는 method_A라고 부르기로한다.루비 호출자 가져 오기 개체 이름 내부 메서드 기본 라이브러리

이것은 간단한 참조입니다.하지만 내가하는 일은 훨씬 더 복잡 할 것입니다. 나는 훨씬 더 좋은 방법으로 필요한 것을 해결할 수있는 대안이 있다는 것을 이해합니다. 그러나 아쉽게도 코드는 거의 완료되었습니다. 그리고 나는 많은 것을 조정할 충분한 시간이 없다. 어쨌든, 여기 간다 :

class Picture 
    attr_accessor :size 

    def resize 
    name = self.get_object_name_here 
    case name 
    when Big #Can be string or variable, I don't mind 
     self.size *= .5 
    when Medium 
    when Small 
     self.size *= 2 
    else 
    end 

    def get_object_name_here 
    object_name 
    end 
end 

Big = Picture.new 
Medium = Picture.new 
Small = Picture.new 
Big.size = 10 
Medium.size = 10 
Small.size = 10 
Big.resize  => 5 
Medium.resize => 10 
Small.resize  => 20 

을 수있는 방법이 있다면 바로

이 크게 감사합니다 도움이 될 것

name = object_name 
을 할!

편집 : 대문자로 표시된 대문자, 중간, 소문자는 유감스럽게 생각합니다. 그들은 오타입니다.

+0

big = Picture.new("Big") medium = Picture.new("Medium") small = Picture.new("Small") puts "before resize" puts big.size puts medium.size puts small.size big.resize medium.resize small.resize puts "after resize" puts big.size puts medium.size puts small.size 

결과 :이 같은 클래스를 사용할 수 있습니까? 당신의 예에서 그들은 '빅, 중, 소'가 될 것입니까? –

+0

예, 그렇습니다. 빅, 중형 및 소형입니다. – user3163916

+0

'Picture' 객체에 할당 된 변수의 이름이므로 달성하고자하는 것이 가능하지 않다고 생각합니다.'Picture'는 어떤 변수를 사용하고 있는지 알 수 없습니다. –

답변

1

당신은 당신이 모든 인수를 따라 통과 new를 사용할 때 루비에 의해 호출되는 클래스

class Picture 
    attr_accessor :size, :name 

    def initialize(name) 
    @name = name 
    @size = 10 
    end 

    def resize 
    case name 
    when "Big" 
     self.size *= 0.5 
    when "Medium" 
    when "Small" 
     self.size *= 2 
    else 
    end 
    end 
end 

initialize 방법의 정의를 변경해야합니다. 당신이 object_name``무엇을 의미합니까

before resize 
10 
10 
10 
after resize 
5.0 
10 
20 
+0

감사합니다. – user3163916

관련 문제