Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby错误:未定义的方法“length”_Ruby_Methods - Fatal编程技术网

Ruby错误:未定义的方法“length”

Ruby错误:未定义的方法“length”,ruby,methods,Ruby,Methods,我使用ruby docs的网站示例来确定数组中最长的字符串长度,下面是我使用的代码: longest = twoOfArray.inject(0) {|memo,word| memo.length > word.length ? memo : word} 根据docs网站,这应该告诉我数组中最长单词的长度。但是,我得到一个错误,告诉我“.length”是一个未定义的方法。我做错了什么 我使用的是Ruby 1.9.3版。您不应该在inject方法中传递第一个参数 正确的代码是 longe

我使用ruby docs的网站示例来确定数组中最长的字符串长度,下面是我使用的代码:

longest = twoOfArray.inject(0)  {|memo,word| memo.length > word.length ? memo : word}
根据docs网站,这应该告诉我数组中最长单词的长度。但是,我得到一个错误,告诉我“.length”是一个未定义的方法。我做错了什么


我使用的是Ruby 1.9.3版。

您不应该在inject方法中传递第一个参数

正确的代码是

longest = twoOfArray.inject {|memo,word| memo.length > word.length ? memo : word}

若并没有参数,那个么第一个元素将是初始的memo对象。

对不起,我并没有注意到你们在我的第一个答案中需要什么

如果需要确定最长字符串长度,则需要块返回长度。即

longest = twoOfArray.inject(0) {|memo,word| memo > word.length ? memo : word.length }

请编辑以给出整个错误消息,并显示twoOfArray的外观。另一种方法是{| e | e.size}的twoOfArray.max_。是Ruby命名约定的总结。变量应为小写字母,可选地用下划线分隔。尺寸和长度是同义词。是的,这似乎奏效了,谢谢!如果你不介意的话,我还有一个问题。我需要使用最长变量的值并将其放入printf:printf%-*s。整行代码如下所示:twoOfArray.each{k,v | put%-.*s%[最长]+'*'*v}。然而,它给了我一个错误,指出“&”太少的错误。我做错了什么?