Ruby 数组展平不起作用(实例变量nil)
我试图编写一个简单的数组展平方法,,但使用实例变量无法工作。它只能使用类变量工作。有人能告诉我为什么吗?以及如何使用实例变量使其工作Ruby 数组展平不起作用(实例变量nil),ruby,Ruby,我试图编写一个简单的数组展平方法,,但使用实例变量无法工作。它只能使用类变量工作。有人能告诉我为什么吗?以及如何使用实例变量使其工作 class Array @y = [] def flatten_array self.each do |x| if x.class.to_s != 'Array' @y << x else x.flatten_array end end return @y end
class Array
@y = []
def flatten_array
self.each do |x|
if x.class.to_s != 'Array'
@y << x
else
x.flatten_array
end
end
return @y
end
end
a = [1,2,3,4,5]
b = [6,7,8]
c = [9,10]
a1 = [12,13,a,b,c]
puts a1.inspect
b1 = a1.flatten_array
puts b1.inspect
类数组
@y=[]
def展平阵列
self.each do|x|
如果x.class.to_!='数组'
@y对于实例变量,它不起作用的原因是x.flatte_数组使用的是一个新的@y
,而不是您正在累积的那个。然而,以这种方式使用实例或类变量并不是一种好的做法,因为它有效地将全局变量用于局部函数
编写需要额外变量的递归函数的标准过程是使用辅助函数:
def flatten_array
int_flatten(self, [])
end
private
def int_flatten(a, result)
a.each do |elem|
if (elem.is_a? Array)
int_flatten(elem, result)
else
result << elem
end
end
return result
end
def展平阵列
int_展平(自身,[])
结束
私有的
def int_展平(a,结果)
a、 每个do | elem|
if(元素是数组)
整平(元素、结果)
其他的
结果
只是好奇:你想完成什么?已经有了一个数组#flatte
,你知道……为什么你想使用实例变量而不是局部变量?标题中有一个“实例”的拼写错误。收件人:Marc AndréLafortune我只是想写我自己的数组_flatte来更好地理解Ruby。致:Andrew Grimm感谢您指出标题中的拼写错误。然而,这并没有回答我的问题。凯西,谢谢你的回答。我想局部变量可能不起作用,但显然我错了。我试过了你的两段代码。第二个有效,第一个无效。请参见下面的内容。代码段1:类数组定义展平数组整平数组整平数组结果=[]每个do | elem | if(elem.is | a?Array)整平数组(elem,result)其他结果代码段2:类数组定义展平数组结果=[]每个do | elem | if(elem.is | a?Array)result+=elem.flatten\u数组的其他结果Kathy,您错过了第一个结果中的返回结果。它在投入回报后起作用。。class Array def flatten_Array result=int_flatte(self,[])返回结果end私有def int_flatten(a,result)a.each do | elem | if(elem.is_a?Array)int_flatte(elem,result)else结果我将编辑我的响应。我也看到我错过了一个返回结果。
def flatten_array
result = []
each do |elem|
if (elem.is_a? Array)
result += elem.flatten_array
else
result << elem
end
end
return result
end
a = [1,2,3,4,5]
b = [6,7,8]
c = [9,10]
a1 = [12,13,a,b,c]
puts a1.inspect
#=> [12, 13, [1, 2, 3, 4, 5], [6, 7, 8], [9, 10]]
puts a1.flatten.inspect
#=> [12, 13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]