Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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
Arrays Ruby:字符串在数组中显示为字符串_Arrays_Ruby_String - Fatal编程技术网

Arrays Ruby:字符串在数组中显示为字符串

Arrays Ruby:字符串在数组中显示为字符串,arrays,ruby,string,Arrays,Ruby,String,我正在Ruby上做一个pig拉丁语程序,遇到了一些麻烦。 控制台显示此错误 提前谢谢 这是因为您正在使用。如果您阅读文档,您可以找到: 返回一个新数组,其中包含每次运行一次块的结果 枚举中的元素 因为返回类型是数组,所以您得到的是数组作为结果,而不是字符串(这里正好是数组的第一个元素) 一个简单的解决方案总是返回数组的第一个元素。您可以通过以下方式实现此目的: str.split.map do |word| if vowels.include?(word[0]) ....

我正在Ruby上做一个pig拉丁语程序,遇到了一些麻烦。 控制台显示此错误


提前谢谢

这是因为您正在使用。如果您阅读文档,您可以找到:

返回一个新数组,其中包含每次运行一次块的结果 枚举中的元素

因为返回类型是数组,所以您得到的是数组作为结果,而不是字符串(这里正好是数组的第一个元素)

一个简单的解决方案总是返回数组的第一个元素。您可以通过以下方式实现此目的:

str.split.map do |word|
    if vowels.include?(word[0])
      ....
    else
      word
    end
end.first # returning the first element of resultant array, nil if none present
您正在使用
Array#map
。此方法返回一个数组。由于它是方法
translate
的最后一条语句,因此将隐式返回此数组。因此,当您调用该方法时,它将输出一个数组。要解决这个问题,请执行以下操作

str.split.map do |word|
    if vowels.include?(word[0])
        #...
    elsif word[0..2].include?("qu")
        #...
    end
end.join(' ')

这个
连接(“”)
将每个元素连接成一个字符串,每个元素由一个空格(“”)分隔。这使得该方法的输出成为字符串而不是数组,从而解决了您的问题,同时考虑了大小超过一个元素的数组,而shivam的另一个答案只返回第一个元素。这样可扩展性更强。

谢谢您的帮助:)
str.split.map do |word|
    if vowels.include?(word[0])
      ....
    else
      word
    end
end.first # returning the first element of resultant array, nil if none present
str.split.map do |word|
    if vowels.include?(word[0])
        #...
    elsif word[0..2].include?("qu")
        #...
    end
end.join(' ')