我有以下逻辑来确定要执行的eval
查询..
docker_version=%x[docker version -f {{.Server.Version}}].gsub(/[^0-9,.]/, "")
if docker_version < '17.06'
query="eval $(aws ecr get-login --region us-west-2)"
else
query="eval $(aws ecr get-login --no-include-email --region us-west-2)"
end
sh "#{query}"
if
语句可能是1
代码行而不是5
吗?
答案 0 :(得分:2)
使用三元运算符:
query = docker_version < '17.06' ?
"eval $(aws ecr get-login --region us-west-2)" :
"eval $(aws ecr get-login --no-include-email --region us-west-2)"
使用字符串连接,我们可以进一步整理它:
query = "eval $(aws ecr get-login " +
(docker_version < '17.06' ? "--region us-west-2)" : "--no-include-email --region us-west-2)")
答案 1 :(得分:1)
if
语句可能是1
代码行而不是5
吗?
Ruby中永远不需要换行符,您可以随时删除它们:
if docker_version < '17.06' then query="eval $(aws ecr get-login --region us-west-2)" else query="eval $(aws ecr get-login --no-include-email --region us-west-2)" end
就我个人而言,我并不理解这种对#1所写的一切的痴迷,但是你要求它,就在这里。我根本没有发现它更具可读性。
答案 2 :(得分:0)
字符串连接绝对是一个好主意,但它对于初学者来说几乎不会产生混淆。因此,为了更好的可读性,您可以使用如下所示的字符串插值,
query = "eval $(aws ecr get-login #{docker_version < '17.06' ? '--region us-west-2' : '--no-include-email --region us-west-2'})"
我认为你也可以将公共选项区域移到三元oprator之外,
query = "eval $(aws ecr get-login --region us-west-2 #{docker_version < '17.06' ? '' : '--no-include-email'})"