我有以下代码:
foo ||= []
foo << "bar"
我相信这可以用一行代码实现,但我找不到方法。
重要的是,foo 可能存在,也可能不存在。如果它存在,它总是一个数组;如果它不存在,它必须变成一个数组,并且添加一个变量。
就像这样:
(foo ||= []) << "bar"
如果foo
已经存在,则括号中的部分返回它,否则创建一个新的foo
,然后使用<<
将其附加到它。
foo
未定义时添加"bar"
:foo ||= ["bar"]
如果您想添加"bar"
,无论foo
是否已经存在:
(defined? foo) ? foo << "bar" : foo = ["bar"]
然而,在后一种情况下,我个人更喜欢原始代码的编写方式。当然,这可以在一行中完成,但我认为两行实现更易读。
if (defined? foo) then foo << "bar" else foo = ["bar"] end
- dbyrne您写的代码中,是否存在不确定本地变量是否存在的情况?
如果是这样的情况:
def procedural_method(array)
result ||= []
array.each do |array_item|
result << bar(array_item)
end
result
end
def functional_programming_method(array)
array.map do |array_item|
bar(array_item)
end
end
FooController#create
必须将项目附加到“全局”会话哈希中:session[:comments] << id
。不仅FooController会添加到该哈希表,而且可能还有其他控制器。现在我写下这个问题,我意识到在助手中使用getter和setter可能是更好的模式。 - berkes