代码之家  ›  专栏  ›  技术社区  ›  TheAuzzieJesus

这个IF语句是否可能是1行代码,而不是5行?

  •  0
  • TheAuzzieJesus  · 技术社区  · 7 年前

    我有以下逻辑来确定 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 ?

    3 回复  |  直到 7 年前
        1
  •  2
  •   Tim Biegeleisen    7 年前

    使用三元运算符:

    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)")
    
        2
  •  1
  •   Jörg W Mittag    7 年前

    有没有可能 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
    

    就我个人而言,我不理解这种痴迷于“用一行书写一切”,但你要求的,就在这里。我觉得它一点也不可读。

        3
  •  0
  •   Mohanraj    7 年前

    字符串连接绝对是一个好主意,但它不会让初学者感到困惑。因此,为了更好的可读性,您可以使用如下所示的字符串插值,

    query = "eval $(aws ecr get-login #{docker_version < '17.06' ? '--region us-west-2' : '--no-include-email --region us-west-2'})"
    

    query = "eval $(aws ecr get-login --region us-west-2 #{docker_version < '17.06' ? '' : '--no-include-email'})"