Ruby 块“方法中的块”:true:TrueClass 的未定义方法“注入”(NoMethodError)
Ruby block `block in Method': undefined method `inject' for true:TrueClass (NoMethodError)
我有一个方法接受一个字符串和 returns 一个新的句子字符串,其中每个超过 4 个字符的单词都删除了所有元音。输出应该 return 修改后的句子字符串符合这些规范。
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
我收到以下错误并尝试将修改后的元素包含/"inject" 到一个新数组中,在该数组中加入上述所需的字符串。如果我删除 "inject" 我得到一个布尔值而不是修改后的字符串。
您收到此错误是因为您尝试调用 Enumerable#inject method on result of Enumerable#any?,它是 true
或 false
。
其他一些小注意事项:
调用 str.split('')
将 return 所有字符而不是单词的数组。
要从修饰词数组中形成结果字符串,您可以使用 Array#join 方法
就我个人而言,我会通过以下方式解决此任务:
def abbreviate_sentence(sentence)
words = sentence.split # By default this method splits by whitespace
handled_words = words.map do |w|
if w.length > 4
w.tr!('aeiou', '') # This method deltes all the wovels from word
end
w # Handled word
end
handled_words.join(' ') # Ruby returnes last evaluated expression automatically
end
部分结果使用 irb
:
abbreviate_sentence 'Hello there! General Kenobi' # => "Hll thr! Gnrl Knb"
abbreviate_sentence 'sample text' # => "smpl text"
有一件事我应该指出:
此方法不保留空格,因为使用 String#split
abbreviate_sentence "Example \n with some \t\t\t new strings \n and \t tabulations" # => "Exmpl with some new strngs and tbltns"
我有一个方法接受一个字符串和 returns 一个新的句子字符串,其中每个超过 4 个字符的单词都删除了所有元音。输出应该 return 修改后的句子字符串符合这些规范。
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
我收到以下错误并尝试将修改后的元素包含/"inject" 到一个新数组中,在该数组中加入上述所需的字符串。如果我删除 "inject" 我得到一个布尔值而不是修改后的字符串。
您收到此错误是因为您尝试调用 Enumerable#inject method on result of Enumerable#any?,它是 true
或 false
。
其他一些小注意事项:
调用
str.split('')
将 return 所有字符而不是单词的数组。要从修饰词数组中形成结果字符串,您可以使用 Array#join 方法
就我个人而言,我会通过以下方式解决此任务:
def abbreviate_sentence(sentence)
words = sentence.split # By default this method splits by whitespace
handled_words = words.map do |w|
if w.length > 4
w.tr!('aeiou', '') # This method deltes all the wovels from word
end
w # Handled word
end
handled_words.join(' ') # Ruby returnes last evaluated expression automatically
end
部分结果使用 irb
:
abbreviate_sentence 'Hello there! General Kenobi' # => "Hll thr! Gnrl Knb"
abbreviate_sentence 'sample text' # => "smpl text"
有一件事我应该指出: 此方法不保留空格,因为使用 String#split
abbreviate_sentence "Example \n with some \t\t\t new strings \n and \t tabulations" # => "Exmpl with some new strngs and tbltns"