【问题标题】:Is there a %w{ }--like way to create array of fixnums in Ruby?是否有类似 %w{ } 的方式在 Ruby 中创建 fixnums 数组?
【发布时间】: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]

但这让我很烦恼,我想知道是否有办法在没有地图的情况下做到这一点。 这些消息来源都没有提到这种可能性——我不走运吗?

What does %w(array) mean?

What is the %w "thing" in ruby?

Ruby Programming Syntax - the % notation

【问题讨论】:

标签: ruby arrays notation


【解决方案1】:

由于 % 符号似乎是 Ruby 中处理继承的那些“混蛋” Perl 字符串之一,我强烈怀疑它,但您可以通过

保存几个字符
digits = %w{1 2 3 4 5 6 7 8 9 10}.map(&:to_i)

【讨论】:

  • 哦,我不知道这种语法可能性。不错。
  • 它叫做 Symbol#to_proc,美妙的 @raganwald / Reginald Braithwaite 早在 2007 年就教过我。weblog.raganwald.com/2007/10/stringtoproc.html 它是 Ruby 1.9 的一部分,我认为它也已被向后移植到 1.8。跨度>
  • 即使没有 Rails,我也可以确认它存在于 1.8.7 中。
【解决方案2】:

我是否遗漏了什么或遗漏了什么

digits = [4, 8, 15, 16, 23, 42]

=> [4, 8, 15, 16, 23, 42]

不做吗?

出色的数字选择,顺便说一句:)

【讨论】:

  • :-) 不,你是完全正确的。这是“正常”的做法。但是所有这些逗号!好痛!
【解决方案3】:

% 表示法专门针对字符串,因此不会比您给出的示例更接近。

如果你关心的整数是连续的,你可以使用 Range 对象:

(1..10).to_a

【讨论】:

  • +1,但不应该是(1..10).to_a吗?没有括号,to_a 被发送到10:Fixnum
【解决方案4】:
Array.new(10) {|i| i}

这是一种不用地图的方式。

【讨论】:

  • 嗯,是的,就我的示例数组而言,它可以正常工作,但我更希望有更多...通用解决方案。
【解决方案5】:

您可以编辑 parse.y,它将源代码转换为 Ruby,然后重新编译 Ruby。我自己从未编辑过 parse.y,但这里有一个有趣的 awesome talk 在 RubyKaigi2011。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-14
    • 2011-12-10
    • 1970-01-01
    • 2010-10-16
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多