请看以下代码:
"S".upto("Z") {|word| puts word}
它显示正确的结果。
但是当我使用.downto
方法时,没有结果。
"Z".downto("S") {|word| puts word}
为什么?
请看以下代码:
"S".upto("Z") {|word| puts word}
它显示正确的结果。
但是当我使用.downto
方法时,没有结果。
"Z".downto("S") {|word| puts word}
为什么?
它不起作用,因为String
没有 downto 方法。它只有upto
.
Ruby 中的字符串没有 downto 方法(即使有这样的数字方法)。(检查:http ://ruby-doc.org/core-2.0/String.html )
对此你可能会问:“为什么不呢?” 对此我没有答案。
没有对象.downto
的方法,String
但你可以这样做:
('S'..'Z').to_a.reverse.each {|word| puts word}
或者
"S".upto("Z").to_a.reverse.each {|word| puts word}
以达到您预期的结果。
嗯,这是有充分理由的:没有为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"]