3
니핏 1두 개의 Ruby 스 니펫의 차이점은 무엇입니까?
module A
def cm(m,ret)
class_eval do
define_method(m.to_sym) do
return ret
end
end
end
end
하고 2 조각은 이러한 모듈에 정의
module B
def cm(m,ret)
class_eval do
"def #{m} #{ret} end"
end
end
end
방법은 특정 값을 반환하는 클래스의 메소드를 생성하는데 사용되어야한다. 다음은 예입니다 :
class Whatever
extend A
cm("two",2)
end
이것은 2. 일이, 두 번째 조각의 코드가 작동하지 않습니다되어 돌아갑니다 2라는 이름의 메소드를 작성합니다. 어떤 아이디어? 나는 class_eval
이 문자열을 가질 수 있다고 생각했다.
나는 아직도 정의 자체가 잘못 보이는 생각합니다. "def # {m}; return # {ret}; end" – Jean
@Jean : 표현식이 메소드의 마지막 표현식 일 때 return 키워드는 선택 사항입니다. end 키워드 앞에 또는 메소드 정의의 인수 목록 뒤에 종결자가 있습니다. 나는. 'def five() 5 end'는 유효한 문법입니다. 그러나 'def five 5 end'는 그렇지 않다. – sepp2k