문제

나는이 줄을보고 있었다 :

    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을 전달할 수 있으므로 코드를보다 읽기 쉽게 만듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top