添加到ruby中的列表中

  • 本文关键字:列表 ruby 添加 ruby
  • 更新时间 :
  • 英文 :


我完全是ruby新手,我想根据舞台的值创建一个列表,在这个例子中。我赋了常数。我得到一个空数组(NIL值)。

PROD_WAVE1_STAGE = "prod-wave1"
PROD_WAVE2_STAGE = "prod-wave2"
PROD_WAVE3_STAGE = "prod-wave3"
def prod_dimensionality stage
whitelist = []
case stage
when 'prod-wave1'
whitelist << 'NRT'
when 'PROD_WAVE2_STAGE'
whitelist << 'SIN'
when 'PROD_WAVE3_STAGE'
whitelist << 'DUB'
when 'PROD_WAVE4_STAGE' 
whitelist << 'IAD'
end
end
prod_dimensionality(PROD_WAVE1_STAGE)

虽然写的程序没有错,但是在维护方面有点危险。记住,case语句返回最后一个要执行的表达式的值。在您的示例中,这类似于whitelist << 'SIN',并且由于Array#<<返回数组本身,因此您将返回whitelist,这正是您所需要的。

但是想象一下,由于调试的原因,您将在程序中添加额外的语句(例如测试打印),因此它看起来像这样:
def prod_dimensionality(stage)
...
case ....
end
puts "whitelist=#{whitelist}" # Debugging output
end

在本例中,程序将返回puts语句的结果,即nil。调用者将不再看到白名单。

因此,显式地编写返回表达式更安全:

def prod_dimensionality(stage)
...
case ....
end
whitelist # This is what will be returned   
end

您可以创建一个包含映射的散列。然后用它来决定在

中映射什么
stage_mappings = { 'prod-wave1' => 'NRT', ... }
whitelist << stage_mappings[stage]
whitelist.compact # In case there's some nils in there :D

最新更新