.length方法的Ruby错误

.length方法的Ruby错误,ruby,Ruby,我的代码遇到了错误,我不知道为什么。我正在尝试创建一个返回字符串中最长单词的函数。我唯一可以使用的内置Ruby方法是.split。我的代码在下面,我收到的错误在下面。如果您能帮我解决这个问题,我们将不胜感激 提前谢谢 def longest_word(sentence) sentence1 = sentence.split longest_word = "" for i in 0...sentence1.length if i.length > longest_w

我的代码遇到了错误,我不知道为什么。我正在尝试创建一个返回字符串中最长单词的函数。我唯一可以使用的内置Ruby方法是.split。我的代码在下面,我收到的错误在下面。如果您能帮我解决这个问题,我们将不胜感激

提前谢谢

def longest_word(sentence)
    sentence1 = sentence.split
    longest_word = ""

for i in 0...sentence1.length
    if i.length > longest_word.length 
        longest_word = i 
    end 
end 
return longest_word
end

longest_word("one three")
错误如下:

undefined method `length' for 0:Fixnum
(repl):15:in `block in longest_word'
(repl):14:in `times'
(repl):14:in `longest_word'
(repl):29:in `<main>'
0:Fixnum的未定义方法'length'
(回复):15:in‘block in longest_word’
(答复):14:在《泰晤士报》中
(回复):14:在“最长的单词”中
(答复):29:在"中"

问题是,当您将
“1-3”作为参数传递时,您正在迭代整数
0,1,2

不幸的是,您不能直接在integer/fixnum
i
上调用
length
方法。相反,您希望在数组
sentence1
的索引
i
处的元素上调用它,如果这样做有意义的话

像这样的东西应该适合你:

def longest_word(sentence)
  sentence1 = sentence.split
  longest_word = ""

  for i in 0...(sentence1.length - 1)
    if sentence1[i].length > longest_word.length 
      longest_word = sentence1[i]
    end 
  end
  return longest_word
end
或者,更好

def longest_word(sentence)
  sentence.split.max_by(&:length)
end

(从中偷来)

问题是,当您将
“1-3”
作为参数传递时,您正在迭代整数
0,1,2

不幸的是,您不能直接在integer/fixnum
i
上调用
length
方法。相反,您希望在数组
sentence1
的索引
i
处的元素上调用它,如果这样做有意义的话

像这样的东西应该适合你:

def longest_word(sentence)
  sentence1 = sentence.split
  longest_word = ""

  for i in 0...(sentence1.length - 1)
    if sentence1[i].length > longest_word.length 
      longest_word = sentence1[i]
    end 
  end
  return longest_word
end
或者,更好

def longest_word(sentence)
  sentence.split.max_by(&:length)
end

(从中窃取)

您收到错误,因为
语句.length
返回一个数组,您正在执行
i.length
操作,即检查
Fixnum
的长度。 将代码更改为以下内容:

def longest_word(sentence)
  sentence1 = sentence.split
  longest_word = ""

  sentence1.each do |word|
    longest_word = word if word.length > longest_word.length
  end 
  return longest_word
end

longest_word("one three")

出现错误的原因是
语句.length
返回一个数组,您正在执行
i.length
操作,即检查
Fixnum
的长度。 将代码更改为以下内容:

def longest_word(sentence)
  sentence1 = sentence.split
  longest_word = ""

  sentence1.each do |word|
    longest_word = word if word.length > longest_word.length
  end 
  return longest_word
end

longest_word("one three")

不需要显式的
返回
,缩进也会被破坏,但是
每个
的使用都是一个巨大的改进。您还可以将“if”语句重写为一行
longest\u word=word if word.length>longest\u word.length
感谢您的帮助和信息!我真的很感激。不需要显式的
返回
,缩进也会被破坏,但是
每个
的使用都是一个巨大的改进。您还可以将“if”语句重写为一行
longest\u word=word if word.length>longest\u word.length
感谢您的帮助和信息!我真的很感激。非常感谢你为我解释这件事。非常感谢你为我解释这件事。