2014-04-29 1 views
1

조건부로 블럭을 루비의 다른 메소드에 인수로 전달하는 명확한 방법이 있습니까?조건부 블록 "통과"를 달성하는 관용적 인 방법이 있습니까?

내 Rails 앱에서 래퍼를 사용하여 맞춤 설정된 ActionMailer 동작을 정의하고 있으며 암시 적 (지정된 블록 없음) 및 명시 적 (지정된 블록)보기 템플릿을 우아하게 처리하고자합니다.

class Mailer < ::ActionMailer::Base 
    # ... 
    def signed_mail(opts = {}, &block) 
    # ... 
    mail mail_opts, &(block_given? ? block : nil) 
    end 
end 

임의로가 mail에 주어진 블록을 통과 에 더욱 관용적 방법이 있는가? 삼항 연산자는 if/else을 사용하는 것보다 DRYer 코드를 제공하지만 여전히 어색해 보입니다. 어떤 블록을 지정하지 않은 경우 이미 nil이 될 것

class Mailer < ::ActionMailer::Base 
    # ... 
    def signed_mail(opts = {}, &block) 
    # ... 
    mail mail_opts, &block 
    end 
end 

block를, 그래서 이것은 충실의 부족에 따라 전달합니다 :

+0

'mail mail_opts, block'을 호출하면 어떻게됩니까? 블록이 0 일 때조차도? 메일 메쏘드는 signed_mail이라는 이름을 가진 기본 템플릿을 찾을 것입니다. –

답변

2

당신은 더 블록이 통과되지 않은 경우에 대한 특별한 아무것도 할 필요가 없습니다 블록.

+0

+1 우와 나는 그것을 과장 생각했다. –