0

请看以下代码:

"S".upto("Z") {|word| puts word}

它显示正确的结果。

但是当我使用.downto方法时,没有结果。

"Z".downto("S") {|word| puts word}

为什么?

4

4 回答 4

2

它不起作用,因为String没有 downto 方法。它只有upto.

于 2013-07-10T16:16:32.787 回答
1

Ruby 中的字符串没有 downto 方法(即使有这样的数字方法)。(检查:http ://ruby-doc.org/core-2.0/String.html )

对此你可能会问:“为什么不呢?” 对此我没有答案。

于 2013-07-10T16:16:23.000 回答
1

没有对象.downto的方法,String但你可以这样做:

('S'..'Z').to_a.reverse.each {|word| puts word}

或者

"S".upto("Z").to_a.reverse.each {|word| puts word}

以达到您预期的结果。

于 2013-07-10T16:22:32.377 回答
1

嗯,这是有充分理由的:没有为String 类声明的具有该名称的方法!当您不确定时,请记住查找类/方法的文档。

但是有一个解决方法,不用担心,只需使用您自己的方法扩展类即可。我的尝试是:

class String
    def downto value
        v = value.upto self
        v.to_a.reverse.each 
    end
end

puts "S".upto("Z").collect {|x| x}
puts "Z".downto("S").collect {|x| x}

会渲染

Upto : ["S", "T", "U", "V", "W", "X", "Y", "Z"]
Downto: ["Z", "Y", "X", "W", "V", "U", "T", "S"]
于 2013-07-10T16:30:08.080 回答