是否有在 Vagrantfiles 中引用变量的样式指南?

Posted

技术标签:

【中文标题】是否有在 Vagrantfiles 中引用变量的样式指南?【英文标题】:Is There A Style Guide For Quoting Variables In Vagrantfiles? 【发布时间】:2017-10-25 08:20:47 【问题描述】:

当我查看 Vagrant 文档 https://www.vagrantup.com/docs/networking/forwarded_ports.html 时,它给出了一个这样的例子:

Vagrant.configure("2") do |config|
  config.vm.network "forwarded_port", guest: 2003, host: 12003, protocol: "tcp"
  config.vm.network "forwarded_port", guest: 2003, host: 12003, protocol: "udp"
end

但是,以下内容似乎也有效:

单引号

Vagrant.configure("2") do |config|
  config.vm.network 'forwarded_port', guest: 2003, host: 12003, protocol: "tcp"
  config.vm.network 'forwarded_port', guest: 2003, host: 12003, protocol: "udp"
end

冒号前缀

Vagrant.configure("2") do |config|
  config.vm.network :forwarded_port, guest: 2003, host: 12003, protocol: "tcp"
  config.vm.network :forwarded_port, guest: 2003, host: 12003, protocol: "udp"
end

这些语法有什么区别?是否只有当您有变量like in puppet 时才应该使用双引号?

什么是冒号前缀语法?这是令人困惑的,因为该行中的其余关键字都有冒号后缀。

是否有 Vagranfiles 的样式指南?

【问题讨论】:

【参考方案1】:

免责声明:以下是自以为是(只是我对此的看法)。但所有的风格指南也是如此。不要陷入对这背后的推理的深入思考,只需做出选择并努力保持一致即可。

是否有样式指南 Vagrantfiles?

很快:Use this style guide

长答案:似乎没有任何官方的 Vagrant 风格指南,但由于它是 Ruby 编程语言,我们可以查看官方的 Ruby 风格指南……哦,等等,实际上 Ruby 也没有!这个可能是最受欢迎的,所以坚持下去:

rubocop-hq/ruby-style-guide

我应该使用什么:单引号 ('word')、双引号 ("word") 或符号 (:word)?

简短地说:使用双引号。

长答案:风格指南在单引号和双引号问题上是矛盾的:it offers you choice A and B,所以坚持使用 Vagrant 文档:

默认使用双引号:

node.vm.provision "shell", inline: "echo hello from node #i"

如果双引号是字符串的一部分,请使用单引号。这个snippet from Vagrant documentation与style guide一致:

config.winssh.export_command_template = '$env:%ENV_KEY%="%ENV_VALUE%"'

什么是冒号前缀语法?

简而言之:冒号标记symbol (see Ruby documentation)。

这个答案再扩展一点:What is the colon operator in Ruby?

什么时候应该在 Vagrantfile 中使用symbols

很快:(几乎)从不

长答案:坚持使用双引号以保持一致性,除非您在 Vagrant 解析您的 Vagrantfile 时遇到可变性或性能问题。更多关于 Ruby 中符号和字符串的性能和可变性:The Difference Between Ruby Symbols and Strings。

【讨论】:

【参考方案2】:

Vagrantfile 是一个 ruby​​ 脚本,因此它遵守 ruby​​ 规则。

使用双引号的主要优点之一是当您需要string interpolation

【讨论】:

所以除非我们需要字符串插值,否则应该使用单引号。什么是冒号前缀?

以上是关于是否有在 Vagrantfiles 中引用变量的样式指南?的主要内容,如果未能解决你的问题,请参考以下文章

是否有在单个过程中在运行时初始化可变数量的对象的过程?

程序设计基石与实践系列之按值传递还是按引用

TypeScript 中是不是有在类中使用的关键字来获取其类型?

是否有在 JavaScript 项目中存储生成文件的标准? [关闭]

是否有在 PayPal 的 iPhone 框架中启用定期付款的选项?

是否有在 C++ 中循环“一直通过”数组的最佳实践?