我有一个带有一些项目配置的YAML文件,我希望重用部分代码以使其易于维护。所以,我尝试使用锚来做到这一点,但我想覆盖以前的节点。这可能吗?
以下是我的例子:
default: &default
output: &default_output
make_video: true
take_screenshot: true
browser: &default_browser
type: :chrome
width: 1024
height: 1280
logger: &default_logger
level: TRACE
output_type: :file
chrome_browser: &chrome_browser
<<: *default
browser:
type: :chrome
user_agent: user_agent_string_for_chrome
firefox_browser: &firefox_browser
<<: *default
browser:
type: :firefox
user_agent: user_agent_string_for_firefox
好的,所以这是第一部分:这可能吗? firefox_browser会覆盖&#34;类型&#34;?
现在是第二部分:
profile:
<<: *default
staging:
europe:
url: www.staging-europe-site.com
chrome:
<<: *browser_chrome
firefox:
<<: *browser_firefox
america:
url: www.staging-america-site.com
chrome:
<<: &browser_chrome
firefox:
<<: &browser_firefox
live:
europe:
url: www.europe-site.com
chrome:
<<: &browser_chrome
firefox:
<<: &browser_firefox
america:
url: www.america-site.com
chrome:
<<: &browser_chrome
firefox:
<<: &browser_firefox
我可以做这样的事情,以便在读完yaml后,我能做到:
profile_yaml['staging.europe.chrome']
我得到了所有的配置?
答案 0 :(得分:2)
至于您的第一个问题,由于密钥browser
(来自default
)的值已替换为chrome_browser
中定义的值,因此无法执行您想要的操作。没有树合并或类似的进行。
所以对于你的第二个例子,你最终会得到:
output:
make_video: true
take_screenshot: true
logger:
level: TRACE
output_type: :file
browser:
type: :chrome
user_agent: user_agent_string_for_chrome
如果你把它转回YAML,这可能也是缺乏的。当然还有其他方法可以实现这些目标,但你必须帮助解析器这样做。