도메인 별 언어 (DSL)라고합니다. Here's(Last archived version) 다양한 형태의 Ruby DSL 블록에 대한 훌륭한 정보.
정말 다른 구문으로,이 일에 대해 이동하는 방법은 두 가지가 있습니다
do_thing do |thing| # with a block parameter
thing.foo :bar
thing.baz :wibble
end
# versus
do_thing do # with block-specific methods
foo :bar
baz :wibble
end
두 번째는 더 간결하면서 첫 번째는, 더 명시 적으로 실패 가능성이 적습니다.
제 단순히
yield
갖는 블록 파라미터로서 새로운 인스턴스를 전달하여, 그래서 다음과 같이 구현 될 수
:
class MyThing
def self.create
yield new
end
def foo(stuff)
puts "doing foo with #{stuff}"
end
end
MyThing.create do |thing|
thing.foo :bar
end
하고주는 새로운 개체의 컨텍스트의 블록을 실행하는 두 번째 self
에 대한 액세스, 인스턴스 변수 및 방법 :
:
class MyThing
def self.create(&block)
new.instance_eval &block
end
def foo(stuff)
puts "doing foo with #{stuff}"
end
end
MyThing.create do
foo :bar
end
그리고 당신은 정말, MyThing.create
를 호출하지 않고 그것을 수행하려는 경우
def create_thing(&block)
MyThing.create &block
end
이런 종류의 예제가있는 소스가 있습니까? 이와 같이 루비 코드로 설명 된 다양한 디자인 패턴을 갖는 것이 좋을 것입니다. –