이것은 Sinatra의 라우트 메소드 처리와 관련된 이전 질문에 초점을 맞춘 버전입니다.Sinatra가 경로의 메소드 블록을 복사하는 이유는 무엇입니까?
시나가 경로 내에서 메소드 블록 소요 소스 코드에 대한 이해에서, 같은 몸 밖으로 즉 포함하는 새로운 방법을 전달합니다
get "some/url" do
return "Hello World" # this gets taken out
end
그래서이 예에서 메소드 본문을 카피 한 것을 Sinatra 객체에 적용되는 새로운 메서드로 변환합니다. 나는 왜 이런 일이 일어 났는지 궁금해서 IRC 채널을 시도했지만 아무도 없었고 메일 링리스트는 그다지 바빴다.
def generate_method(method_name, &block)
define_method(method_name, &block)
method = instance_method method_name
remove_method method_name
method
end
그래서 그들은 이렇게 그냥 참조하지 왜 어떤 특별한 이유가 :
내가 그들의 프레임 워크에 대해 이야기하고 소스 코드의 주요 벌크 선 1180 주위에 base.rb 내 방법 자체?
내가이 질문을하는 이유는 Sinatra가 현재이 방법을 처리하기 때문에 외부의 지식을 가진 메서드를 가질 수 없으며 문맥없이 단일 메서드를 사용하여 클래스 캡슐화를 해제하기 때문입니다.
나는이 질문에 대한 대답이 명확 해 졌다고 생각하는데, 그것은 익명의 방법이 아니라 일류 방법이라는 오해였다. 그것은 여전히 * 실제 * 문제는 도움이되지 않지만 그것은 다른 질문 내에 있습니다. – Grofit
방금 들었던 한 가지 ... 마지막 예제에서 익명 메소드의 범위를 벗어나는 것에 액세스하는 방법을 보여줍니다. 이는 ** IS ** 내 문제이지만 외모를 보일 때 유일한 방법은 헬퍼에 추가하거나 세트를 사용하는 것입니다. 이것은 메소드 블록이 실제로 필요한 모든 것을 수행하는 작은 것들에 유용 할 것입니다. 그러나 다른 클래스와 인스턴스에 의존성이있을 때 범위에 들어가기 위해 거의 모든 것을 도우미에 추가하는 것처럼 보입니다. 내가 가진 주된 문제를 표시하는 질문은 KL-7에 대한 의견 중 하나입니다. – Grofit
모듈 식 응용 프로그램을 조사해야합니다. –