我完全是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