문제
나는이 줄을보고 있었다 :
extensions << Module.new(&block) if block_given?
새 모듈을 만들어 Arry에 추가하는 것 같습니다.
그래도 블록에서 모듈을 작성 하시겠습니까? 블록은 무엇이든 될 수 있으며 확장 배열은 예측할 수 없습니다.
편집 : 이것은 Sinatra의 기본 클래스에서 나온 것입니다.
def register(*extensions, &block)
extensions << Module.new(&block) if block_given?
extensions.each do |extension|
extend extension
extension.registered(self) if extension.respond_to?(:registered)
end
end
해결책
블록의 코드는 블록을 사용하지 않고 만들어진 모듈의 코드보다 "예측할 수없는"코드가 아닙니다. 내가 쓴지 여부
module Foo
def foo() "bar" end
end
또는
Foo = Module.new do
def foo() "bar" end
end
나는 같은 효과를 얻는다. 둘 다 다른 클래스의 기능을 확장 할 수 있습니다.이 방법은이 방법의 목적입니다.
다른 팁
이 경우 OneLiner 내부에 A & Block을 전달할 수 있으므로 코드를보다 읽기 쉽게 만듭니다.
제휴하지 않습니다 StackOverflow