tr-6ren">
gpt4 book ai didi

ruby - 我的代码有什么问题(试图缩写)?

转载 作者:太空宇宙 更新时间:2023-11-03 17:59:24 24 4
gpt4 key购买 nike

我正在使用 irb/ruby1.9.1。

第一步

我写了下面的代码:

  def isUppercase  
self>= ?A && self<= ?Z
end

class String
def abbreviate
abbr = ""
each_byte do |c|
if c.isUppercase
abbr += c.chr
end
end
abbr
end
end

第二步

我正在评估下面我认为是“UFO”的代码。
“不明飞行物”.abbreviate

但是,发生了错误。我该如何纠正它?错误在这里。

irb(main):044:0> load("abbrevi.rb")
=> true
irb(main):045:0> "Unidentified Flyng Object".abbreviate ArgumentError: comparison of Fixxnum with String failed
from C:/Ruby192/lib/ruby/1.9.1/abbrevi.rb:4:in >=' from
C:/Ruby192/lib/ruby/1.9.1/abbrevi.rb:4:in isUppercase' from
C:/Ruby192/lib/ruby/1.9.1/abbrevi.rb:12:in block in abbreviate' from
C:/Ruby192/lib/ruby/1.9.1/abbrevi.rb:11:in each_byte' from
C:/Ruby192/lib/ruby/1.9.1/abbrevi.rb:11:in abbreviate' from (irb):45 from
C:/Ruby192/bin/irb:12:in <main>

最佳答案

试试这个:

class Fixnum
def isUppercase
self.chr >= ?A && self.chr <= ?Z
#note use of `chr` to avoid error that occurs when
#comparing a Fixnum to a String
end
end

class String
def abbreviate
abbr = ""
each_byte do |c|
if c.isUppercase
abbr += c.chr.to_s #note this usage as well
end
end
abbr
end
end

请注意,您不能将字符串添加到数字或进行比较,因此下面会产生错误:

irb> 1 >= "A"
# => ArgumentError: comparison of Fixnum with String failed

更新:@coreyward 的回答是总体上完成您正在做的事情的更好方法,但我的回答只是指出如何修复您的代码以及您出错的原因。更好的方法可能是使用正则表达式。

关于ruby - 我的代码有什么问题(试图缩写)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7620976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com