【发布时间】:2011-11-30 22:51:24
【问题描述】:
有没有办法使用 ruby 的 % 表示法创建一个 Fixnums 数组?
写起来显然很琐碎,例如[编辑:将示例更改为非连续数字]
digits = %w{4 8 15 16 23 42}.map{|d| d.to_i}
=> [4, 8, 15, 16, 23, 42]
但这让我很烦恼,我想知道是否有办法在没有地图的情况下做到这一点。 这些消息来源都没有提到这种可能性——我不走运吗?
【问题讨论】:
有没有办法使用 ruby 的 % 表示法创建一个 Fixnums 数组?
写起来显然很琐碎,例如[编辑:将示例更改为非连续数字]
digits = %w{4 8 15 16 23 42}.map{|d| d.to_i}
=> [4, 8, 15, 16, 23, 42]
但这让我很烦恼,我想知道是否有办法在没有地图的情况下做到这一点。 这些消息来源都没有提到这种可能性——我不走运吗?
【问题讨论】:
由于 % 符号似乎是 Ruby 中处理继承的那些“混蛋” Perl 字符串之一,我强烈怀疑它,但您可以通过
保存几个字符digits = %w{1 2 3 4 5 6 7 8 9 10}.map(&:to_i)
【讨论】:
我是否遗漏了什么或遗漏了什么
digits = [4, 8, 15, 16, 23, 42]
=> [4, 8, 15, 16, 23, 42]
不做吗?
出色的数字选择,顺便说一句:)
【讨论】:
% 表示法专门针对字符串,因此不会比您给出的示例更接近。
如果你关心的整数是连续的,你可以使用 Range 对象:
(1..10).to_a
【讨论】:
(1..10).to_a吗?没有括号,to_a 被发送到10:Fixnum。
Array.new(10) {|i| i}
这是一种不用地图的方式。
【讨论】:
您可以编辑 parse.y,它将源代码转换为 Ruby,然后重新编译 Ruby。我自己从未编辑过 parse.y,但这里有一个有趣的 awesome talk 在 RubyKaigi2011。
【讨论】: