将块传递给x.times方法

时间:2015-04-30 18:15:59

标签: ruby

我正在使用ruby的内置函数。我想知道如何动态分配值并在块中打印它。

让我告诉你我的榜样。

irb(main):001:0> i = 0
=> 0
irb(main):002:0> a = "a"
=> "a"
irb(main):003:0> while i<10
irb(main):004:1> x,a = a, a.next
irb(main):005:1> print x, " "
irb(main):006:1> i+=1
irb(main):007:1> end
a b c d e f g h i j => nil

现在我想用x.times方法获得相同的结果。 10.times {puts x,a=a, a.next}引发错误。如何使用x.times获得相同的结果? 我的ruby版本是1.8.7

编辑:我尝试了一下并得到了这个。但是我们不能像我在while循环中那样使用赋值吗?除了打印“a”和空格外,一切似乎都没问题。你能帮我打印出“a”和空格吗?

irb(main):011:0> x="a"
=> "a"
irb(main):012:0> 10.times {print x=x.next}
bcdefghijk=> 10

1 个答案:

答案 0 :(得分:1)

我无法通过一行代码看到一种明显的方法来执行您所要求的工作,但a='a'; 10.t­imes {x,a = a, a.nex­t; print x,' '}似乎对我有用:

> a='a'; 10.ti­mes {x,a = a, a.nex­t; print­ x,' '}
=> "a b c d e f g h i j "

在Ruby中,您可以使用;作为命令分隔符,但将所有内容写入一行。

当然,您可以轻松地写一下:

> a='a'; 
  10.ti­mes do
    x,a = a, a.nex­t; 
    print­ x,' '
  end
=> "a b c d e f g h i j "

并获得相同的结果。

相关问题