$array = []
def range(start_position,end_position)
for i in start_position..end_position
$array.push(i)
puts $array
end
return $array
end
range(1,10)
我想知道为什么我的阵列没有返回。很明显,当我输入$ array时,插入了1-10,但是当我调用我的函数时,我希望返回数组。任何想法,我通过文档阅读,但无法找到我做错了或者我是否犯了任何语法错误。
答案 0 :(得分:0)
您的代码基本上是正确的,您只需省略puts $array
块中的for
即可。而且也不需要可选的return
关键字。所以修复我们的代码:
$array = []
def range(start_position,end_position)
for i in start_position..end_position
$array.push(i)
end
$array
end
p range(1,10) #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Kernel#p
执行Kernel#inspect
方法,如文档中所述,该方法提供了相关对象的人类可读表示。在Ruby中,做这样的事情会好得多:
def range(start_position,end_position)
(start_position..end_position).map {|i| i }
end
p range(1,10) #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
答案 1 :(得分:0)
您的数组确实返回,但您没有对返回值执行任何操作。尝试将其保存到变量或打印结果:
print range(1, 3) # => [1, 2, 3]
如果您正在寻找一种更简单的方法来实现此功能,您可以使用Ruby范围来执行此操作,例如:
def range (start_position, end_position)
# Create a range and convert it to an array
# We can omit return
(start_position .. end_position).to_a
end
print range(1, 3) # => [1, 2, 3]
另外要注意,您的功能只会在第一次使用,因为您使用全局变量作为起点。检查多次调用时会发生什么:
print range(1, 3) # => [1, 2, 3]
print range(1, 3) # => [1, 2, 3, 1, 2, 3]