Fixnum to Array

时间:2015-09-15 14:46:15

标签: ruby

是否可以使用4等Fixnum并将其转换为[1, 2, 3, 4]等有序数组?即,

x = 4
x.do_some_magic!
x # => [1, 2, 3, 4]

3 个答案:

答案 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对象,而不是变量,并且方法无法知道接收者访问的变量名称是什么。所以这是不可能的。