2012-07-15 3 views
2

메소드에 속성을 지정하는 방법이 있습니까? 나는 당신이 클래스를 가지고 그것을 할 수 있다는 것을 알고 있지만 비슷한 일련의 메소드를 가지고 있으며 각각에 속성을 할당 할 수 있다면 정말 도움이 될 것입니다. 누구든지 루비를 어떻게 할 수 있는지 또는 루비에서도 가능한지 알고 있습니까?Ruby - 메소드 속성

편집 : 내가 기본적으로 말은 당신이 클래스가있을 때이처럼에 속성을 할당 할 수 있다는 것입니다 : 내가 궁금하네요

class Person 
    attr_accessor :age 
    ... 
end 

그것을 할 수도 있습니다 경우 그 방법과 같은 이 :

class Trucks 
def get_fire_truck_name 
    attr_accessor :size 
    ... 
end 
end 

(.. Btw는이 그냥 예입니다 실제 프로그램은 내가 단순히 속성을 부여하기 위해 클래스로 내 방법을 설정 할 수없는 이유를 설명하는 훨씬 더 복잡하다)

그냥 객체에 변수로 메소드를 호출 할 수있는 얘기를하는 경우
+0

당신에 대한 예를 제공한다 :

class Person attr_accessor :age end m = Person.instance_method(:age) class << m attr_accessor :units end m.units = 'years' puts m.units #=> 'years' 

당신은 명시 적으로 def 키워드를 사용하여 객체에 메소드를 정의 할 수 있습니다 귀하의 문제를 설명하십시오, 그렇지 않으면 귀하의 질문은 꺼져 있습니다. – megas

+3

파이썬이나 자바 스크립트에서 할 수있는 것처럼? Ruby의 메서드는 객체가 아니므로 대답은 '아니오'입니다. – tokland

+2

@tokland Ruby 메소드는 [확실한 객체]입니다 (http://www.ruby-doc.org/core-1.9.3/Method.html). – Brandan

답변

0

attr_reader 접근 Accessors

attr_reader :your_cool_method_name 

당신을 사용하여 적어도 세 가지 내가 아는 경로 ...

이있다 객체에 대한 send를 호출 할 수 있습니다. 이 방법은 (공공, 보호, 개인) 범위를 무시합니다

@object.send :your_cool_mehod_name 

또는 당신은 method_missing 호출을 통해 그것을 할 수 있지만, 이것이 내가 당신에 익숙 할 때까지이 방법에 보류 것이다 조금 고급 질문에 기반 루비가 늘어납니다.

+0

제쳐두고 나는 첫번째 부분이 Ruby에 대한 전반적인 개관을 제공하므로 메타 프로그래밍 프로그래밍 루비를 살펴 보는 것이 좋습니다. http://pragprog.com/book/ppmetr/metaprogramming-ruby – engineerDave

2

메소드가 Ruby의 객체이기 때문에 다른 객체와 마찬가지로 Method 객체에서 메소드를 정의 할 수 있습니다. 특별히 attr_accessor를 사용하려는 경우, 당신은 방법의 eigenclass과 같이 열 수 있습니다

def m.units 
    @units || 'years' 
end 

def m.units=(u) 
    @units = u 
end 

puts m.units 
m.units = 'decades' 
puts m.units