Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Fixnum到数组_Ruby - Fatal编程技术网

Ruby Fixnum到数组

Ruby Fixnum到数组,ruby,Ruby,是否可以获取Fixnum(如4)并将其转换为有序数组(如[1,2,3,4])?即 x = 4 x.do_some_magic! x # => [1, 2, 3, 4] 这是可能的(尽管目标是……): 还是用方法 def method_name (1..self).to_a end x.method_name #=> [1, 2, 3, 4] 您可以使用以下方法传递大小和块: size = 4 Array.new(size, &:next) # => [1, 2

是否可以获取Fixnum(如
4
)并将其转换为有序数组(如
[1,2,3,4]
)?即

x = 4
x.do_some_magic!
x # => [1, 2, 3, 4]
这是可能的(尽管目标是……):

还是用方法

def method_name
  (1..self).to_a
end

x.method_name
#=> [1, 2, 3, 4]
您可以使用以下方法传递大小和块:

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]

不可能。不可能将fixnum转换为一个数组,该数组保持其作为Ruby对象的身份。因此,为了完成您编写的内容,该方法
具有一些魔力
必须更改最初引用接收器对象的变量的引用(在您的示例中为
x
)。然而,一个方法是在Ruby对象上工作的,而不是在变量上工作的,并且对于一个方法来说,没有办法知道接收者访问了哪个变量名。所以这是不可能的。

你这么说很有趣,因为就在我发布这个问题的时候,答案击中了我!这实际上不是OP要求的。OP希望
x
引用数组。@sawa可能不是OP所问的答案是他接受它的原因;)你的观点很好,但我很确定OP并不是要改变
x
本身。如果他这样做了,他会被告知你的答案,并且可以自由地接受。虽然这会产生所需的输出,但它不应该用于任何重要的代码中。@SergioTulentsev你能解释一下吗?很高兴。生产代码的编写应考虑可读性。这条线的作用一点也不明显。我敢打赌,90%的ruby程序员在没有查阅数组文档的情况下不会预测输出<另一方面,代码>范围从#到_a,被广泛使用。人们可能会对
a..b
a..b
之间的差异感到困惑,但总的来说,这是非常明显的。而且,这段代码非常脆弱。它依赖于
0.next
生成
1
这一事实。需求中稍有变化(“结果数组应该是[2,3,4,5]”)就会导致代码的大变化。在这个具体的例子中,范围解决方案将需要较小的变化(只需更改边界)。更容易更改代码=更好的代码。在一个大型的遗留应用程序中,您需要在内存中保存比一些很少使用的数组构造函数更重要的东西。无论如何,这条建议在这里可能不合适@sawa是正确的。在这种情况下,此功能是不可能的,因为接收器是一个
Fixnum
,并且不能以某种方式进行变异,从而用
数组
替换此参考值。话虽如此,我不知道为什么没有人建议
Integer#到
Integer#到
例如
1.到(4).到#=>[1,2,3,4]
@engineerinesmnky:
是在删除的答案中建议的。@Seal,我看到你取消了我的答案-只是好奇,如果你不再觉得我的解决方案可以接受,或者你希望看到更多的答案?你总是那么直截了当:)方法不一定要更改引用。这也可能改变班级。然而,这也是不可能的,所以最终结果是一样的。
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]