Thor - 如何使用lambda函数在method_options上表示默认值

时间:2016-07-28 01:51:08

标签: thor

假设形式为method_option:

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

可以使用非平凡的lambda函数代替'some value'来在运行时导出默认值。

像小事一样微不足道:

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

工作正常。

然而,像:

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

不会,因为它无法找到Model实例(在app / lib / models&中定义,之前已经加载过)。似乎在module_option语句中,Thor类尚未初始化。我想因此挂起了一个故事。

此外,在方法def new中,在method_option语句之后,我可以引用模型而没有问题。我还注意到Thor类在进入新方法之前已经初始化(正如您所期望的那样)。

非常感谢有关如何导航Thor层次结构以解决问题的任何指导。

1 个答案:

答案 0 :(得分:0)

在进一步探索中,我发现延迟执行lambda函数解决了这个问题。

也就是说,在方法 new 中,按如下方式调用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