2016-07-28 60 views
0

假設形式的method_option:托爾 - 如何使用lambda函數對method_options表達默認值

method_option :host_domain,  aliases: '-h', default: 'some value' 

能一個不平凡的lambda函數到位「一些價值」導出默認使用運行時的價值。

一些小事,如:

method_option :host_domain,  aliases: '-h', default: -> { 'some value'.upcase}.call 

工作正常。

然而,這樣的:

method_option :host_domain,  aliases: '-h', default: -> { Model.method}.call 

不會因爲它不能找到模型實例(這是在app/lib中/模型定義&已事先加載)。它也似乎在module_option語句中,Thor類尚未初始化。我想從此掛起一個故事。

此外,在方法def new中,遵循method_option語句,我可以引用Model與out問題。我還注意到,在新方法進入之前,Thor類已經初始化(如您所期望的那樣)。

希望瞭解如何瀏覽Thor層次結構以解決問題的任何指導。

回答

0

在進一步的研究中,我發現延遲執行lambda函數解決了這個問題。

也就是說,在該方法,調用lambda函數如下:

變化:

method_option :host_domain,  type: :string, default: -> {Model.method}.call 

到:

method_option :host_domain,  type: :string, default: -> {Model.method} 

和:

def new(url) 
    ... 
    ... 
    options[:host_domain] = options[:host_domain].call 
相關問題