내가 다음 코드 작성 :이 @commands
해시 클래스 변수 인 경우, 그러나, 작동클래스 변수에 정의 된 λ/Proc 내에서 인스턴스 변수를 어떻게 사용합니까?
class Actions
def initialize
@people = []
@commands = {
"ADD" => ->(name){@people << name },
"REMOVE" => ->(n=0){ puts "Goodbye" },
"OTHER" => ->(n=0){puts "Do Nothing" }
}
end
def run_command(cmd,*param)
@commands[cmd].call param if @commands.key?(cmd)
end
def people
@people
end
end
act = Actions.new
act.run_command('ADD','joe')
act.run_command('ADD','jack')
puts act.people
을, 해시 내부의 코드는 @people
배열을 알 수 없습니다.
@commands
해시를 클래스 변수로 만들고 특정 개체 인스턴스 변수에 계속 액세스하려면 어떻게해야합니까? VictorMoroz의 @와 무의 권고 @ 다음
'add','remove' 및'other' 메소드를 인스턴스 메소드로 정의하고'respond_to?'및'send' 메소드를 호출하여 호출하지 않는 이유는 무엇입니까? –
'@ commands'를 왜 클래스 변수로 사용 하시겠습니까? –
@Victor : 하나의 좋은 이유는 액세스 제어를 쉽게한다는 것입니다. 'send' 메소드와 메소드를 사용한다면'run_command' 메소드에서 사용할 수있는리스트가 필요합니다. 해시를 사용하면 사용 가능한 명령어와 그 구현을 하나의 멋진 패키지로 모을 수 있습니다. –