Ruby块`方法中的块';:未定义的方法`注入';对于true:TrueClass(NoMethodError)

Ruby块`方法中的块';:未定义的方法`注入';对于true:TrueClass(NoMethodError),ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我有一个方法,它接收一个字符串并返回一个新的句子字符串,其中每个超过4个字符的单词都会删除所有元音。输出应将修改后的句子字符串返回到这些规范 def abbreviate_sentence(sent) arr = [] word = sent.split("") word.reject do |v| if word.length > 4 arr << %w(a e i o u).any?.inject(v) else a

我有一个方法,它接收一个字符串并返回一个新的句子字符串,其中每个超过4个字符的单词都会删除所有元音。输出应将修改后的句子字符串返回到这些规范

def abbreviate_sentence(sent)
  arr = []
  word = sent.split("")
  word.reject do |v|
       if word.length > 4
         arr << %w(a e i o u).any?.inject(v)
       else arr << word
       end
  end
  return arr
end
def缩写句子(已发送)
arr=[]
word=sent.split(“”)
拒绝做某事|
如果word.length>4

arr之所以会出现此错误,是因为您试图对结果为
true
false
的方法进行调用

还有一些小事情需要注意:

  • 调用
    str.split(“”)
    将返回所有字符而不是单词的数组

  • 要从修改后的单词数组中形成结果字符串,可以使用


就我个人而言,我将通过以下方式解决此任务:

def缩写句子(句子)
words=句子.split#默认情况下,此方法按空格分隔
handled_words=words.map do|w|
如果w.length>4
w、 tr!!('aeiou','')#此方法从word中挖掘所有级别
结束
处理过的单词
结束
已处理的单词。join(“”)#Ruby自动返回最后计算的表达式
结束
使用
irb
的一些结果:

缩写一句“你好!克诺比将军“#=>“好的,好的,好的”
缩写句子“示例文本”#=>“smpl文本”
我要指出一点: 此方法不保留空格,因为使用了

缩写句子“示例\n带有一些\t\t\t新字符串\n和\t表格”#=>“带有一些新字符串和TBLTN的Exmpl”