是否可以使用4
等Fixnum并将其转换为[1, 2, 3, 4]
等有序数组?即,
x = 4
x.do_some_magic!
x # => [1, 2, 3, 4]
答案 0 :(得分:1)
有可能(尽管目标......):
x = 4
(1..x).to_a
#=> [1, 2, 3, 4]
或使用方法
def method_name
(1..self).to_a
end
x.method_name
#=> [1, 2, 3, 4]
答案 1 :(得分:1)
你可以使用Array#new
传递大小和这样的块:
size = 4
Array.new(size, &:next)
# => [1, 2, 3, 4]
这是可能的,因为块产生每个元素的索引并使用返回值作为其值。例子:
Array.new(4) { |i| i }
# => [0, 1, 2, 3]
Array.new(4) { |i| i + 1 }
# => [1, 2, 3, 4]
Array.new(4) { |i| i.odd? }
# => [false, true, false, true]
答案 2 :(得分:1)
没有。是不可能的。将fixnum转换为保持其作为Ruby对象的身份的数组是不可能的。因此,为了执行您所写的操作,方法do_some_magic!
必须更改最初引用接收器对象的变量的引用(在您的示例中为x
)。但是,一个方法适用于Ruby对象,而不是变量,并且方法无法知道接收者访问的变量名称是什么。所以这是不可能的。