Arrays 注入阵列
我试着做一些如下的计算Arrays 注入阵列,arrays,ruby,hash,ruby-1.8.7,Arrays,Ruby,Hash,Ruby 1.8.7,我试着做一些如下的计算选项是一个空散列,aes是一个数组 options = {} aes = [1,2] test = aes.inject([]) do |array, value| array << value + 2 array << value -1 if options[:calculation] # here options[:calculation] will be nil end 这是正确的,还是有其他方法可以做到这一点?请改用: opti
选项
是一个空散列,aes
是一个数组
options = {}
aes = [1,2]
test = aes.inject([]) do |array, value|
array << value + 2
array << value -1 if options[:calculation] # here options[:calculation] will be nil
end
这是正确的,还是有其他方法可以做到这一点?请改用:
options={}
test=aes.each.with_对象([])do |值,数组|
array在Ruby中,在方法中执行的最后一条语句的结果是返回值。
如果最后一条语句恰好是一条条件语句且未执行,则返回值为nil
def meth
var = nil
10 if var # will not execute
end
p meth
#=> nil
块也是如此
在数组#inject
的情况下,给定给inject
的块的返回值成为累加器的新值
由于在您的情况下,由于条件为false(如options[:calculation]
为nil
),块的最后一条语句不会执行,因此累加器值会意外变为nil
。为了避免返回nil
,必须显式返回累加器的值
如果不想使用array
作为显式返回语句,可以将代码修改为如下内容
aes = [1,2,3,4,3,4]
options = {}
test = aes.inject([]) do |array, value|
array + [value + 2] + (options[:calculation] ? [value - 1] : [])
end
#=> [3, 4, 5, 6, 5, 6]
你有点误用了。它应该对元素应用“二进制操作”,而不是填充数组
options = {}
aes = [1,2]
test = aes.inject([]) do |array, value|
array << value + 2
array << value -1 if options[:calculation] # here options[:calculation] will be nil
end
因此,与其写:
aes = [1,2]
test = aes.inject([]) do |array, value|
array << value + 2
array << value - 1 if options[:calculation]
array
end
aes=[1,2]
test=aes.injection([])do |数组,值|
array NoMethodError:对于#@ArvindKumar,未定义方法“with_object”,您使用的是哪个版本的Ruby?Ruby版本是1.8。7@ArvindKumar你为什么在石器时代?这是一个超级遗留代码库还是您只使用发行版的默认版本?您可以尝试用每个对象替换,用每个对象替换,因为我不记得是哪个版本引入了它,但不要期望太高。正如@ndn指出的,1.8.7从2013年年中正式发布。如果可能的话,尽最大努力尽快升级。您的代码与OP的代码不同:|
从数组中删除重复项。@Stefan您是对的,我错了。将使用+
而不是|
aes = [1,2]
test = aes.inject([]) do |array, value|
array << value + 2
array << value - 1 if options[:calculation]
array
end
aes = [1,2]
test = []
aes.each do |value|
test << value + 2
test << value - 1 if options[:calculation]
end