남자, 오늘 양파의 층을 박리하고있어 수율은, 어쨌든 여기루비 class_eval 및
class MyClass
def initialize(dynamic_methods)
@arr = Array.new(dynamic_methods)
@arr.each { |m|
self.class.class_eval do
define_method(m) do
"<#{yield self if block_given?}>"
end
end
}
end
end
tmp = MyClass.new ['method1', 'method2', 'method3']
tmp.method1 do |t|
"here"
end
내 문제는 내가 define_method (m) 내에서 "여기"에 접근을 시도하고 있다는 것입니다 코드 때 메소드가 작성 될 때 실행되는 것이 아닙니다. 현재의 문장 "< # {block_given 인 경우 자기를 양보 하시겠습니까?}>"나에게 그렇게주지 않습니다. 그리고 궁금한 점이있는 경우이 코드를 그대로 유지해야하지만 MyClass에 대한 모든 변경 작업을 수행 할 수 있습니다.
tmp = MyClass.new ['method1', 'method2', 'method3']
tmp.method1 do |t|
"here"
end
누구나 구문을 사용할 수 있습니까? 귀하의 도움에 미리 감사드립니다.
업데이트 : 내 대답은 아래를 참조하십시오.
1.8.7에서 작동하지만 이전 버전에서는 작동하지 않을 수 있습니다. – mxgrn
슬프게도 당신이 옳다. 나는 1.8.6에있다. & 블록에 (구문 오류) barfed가있다. 즉 {DEF # {m} (블록) "<# {block.call 블록} 경우>" 단부} – Bob
또한 오류가 발생했습니다. 이번에는 "정의되지 않은 지역 변수 또는 메소드'block '"이 발생합니다. – mxgrn