我想提交带有可选选项的车道。例如车道:
lane :mylane do |options|
mailgun(
to: "#{options[:mailto]}"
....
)
end
Run Code Online (Sandbox Code Playgroud)
我如何给出:mailto默认值?所以如果我跑fastlane mylane它会自动设置:mailto为mail@example.com。
但是如果我运行fastlane mylane mailto:"secondmail@example.com"它会使用那个值
shi*_*him 17
正如 Lyndsey Ferguson 在对此答案的评论中指出的那样,以下是最简单的:
mail_addr = options.fetch(:mailto, 'mail@example.com')
Run Code Online (Sandbox Code Playgroud)
其中第一个参数fetch是要获取的选项,第二个参数是默认值(如果未传入该选项)。
我只是想补充一点,这比其他建议要好得多:
options[:mailto] || 'mail@example.com'
Run Code Online (Sandbox Code Playgroud)
处理布尔选项时。
Fastlane(或者可能是 Ruby)将true、false、yes和解释no为布尔值而不是字符串(也许还有其他值,尽管我尝试过N、n、NO、 并且FALSE它们被视为字符串),所以如果在您的 Lane 实现中您有:
options[:my_option] || true
Run Code Online (Sandbox Code Playgroud)
或者
(options[:my_option] || 'true') == 'true'
Run Code Online (Sandbox Code Playgroud)
你会得到意想不到的行为。
myOption如果您根本没有传入,这将默认true为您所期望的。如果你传入,true它也会返回true。但如果你传入,false这将变成true,这当然是你不想要的。
使用options.fetch(:myOption, true)与上面提到的布尔标志一起使用效果很好,因此一般情况下使用似乎更好。
如果您想自己测试一下,这是一个非常全面的示例:
lane :my_lane do |options|
puts("You passed in #{options[:my_option]}")
my_option = options[:my_option] || true
if my_option
puts('Using options[:my_option], the result is true')
else
puts('Using options[:my_option] the result is false')
end
my_option_fetched = options.fetch(:my_option, true)
if my_option_fetched
puts('Using fetched, the result is true')
else
puts('Using fetched, the result is false')
end
end
Run Code Online (Sandbox Code Playgroud)
输出:
fastlane my_lane my_option:true
你传入 true
使用 options[:my_option],结果为 true
使用 fetched,结果为 true
fastlane my_lane my_option:false
你传入了 false
使用 options[:my_option],结果为 true
使用 fetched,结果为 false
fastlane my_lane my_option:no
你传入了 false
使用 options[:my_option],结果为 true
使用 fetched,结果为 false
请注意,例如FALSE将默认为,true因为它没有被解释为布尔值,这对我来说似乎是合理的。
(快车道 1.77.0,红宝石 2.7.2)
编辑:值得注意的是,如果您传递空字符串而不是无/空,您将不会从该fetch方法中获得默认值。
我不确定有没有办法让 Fastlane 通过默认设置。处理很简单:
https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/command_line_handler.rb#L10
但是你可以在你的 Fastfile 中轻松地做到这一点:
lane :mylane do |options|
mail_addr = options[:mailto] || "mail@example.com"
mailgun(
to: "#{mail_addr}"
....
)
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2669 次 |
| 最近记录: |