代码学院在这里错了吗?

CodeAcademy的错误:哎呀,再试一次。 看起来您的方法在没有接收到第二个参数时不会默认按字母顺序排列数组。

def alphabetize(arr, rev=false) if rev == true arr.sort! { |item1, item2| item2  item1 } else arr.sort! end puts arr end alphabetize(["a", "b", "c", "d", "e"]) 

编辑:这是本节的目标(抱歉不包括最初):

1)在方法中添加if / else语句。 如果rev为true,则应按字母顺序对数组进行排序; 如果rev为false(如果用户传递false或者根本没有传递rev的参数,则会发生这种情况),它应该按字母顺序对数组进行排序。

2)在方法之外,放置已排序的数组。 (这样你就可以看到你的方法所做的所有精细工作。)

3)在您选择的数组上调用您的方法以查看它的运行情况!

2)在方法之外,放置已排序的数组。

不在里面,就像你一样。 puts arr返回nil,codeacademy想要数组作为返回值。 在外面你应该puts这个方法的返回值puts外面:

 def alphabetize(arr, rev=false) if rev == true arr.sort! { |item1, item2| item2 <=> item1 } else arr.sort! end arr end puts alphabetize(["a", "b", "c", "d", "e"]) 

PS。 正如韦恩康拉德在评论中指出的那样, sort! 修改你的数组。

 arr1=[2,3,1,5,22] # => [2, 3, 1, 5, 22] alphabetize arr1 # => [1, 2, 3, 5, 22] arr1 # => [1, 2, 3, 5, 22] # you didn't want this array changed, right? 

如果不希望更改数组,则应使用不更改数组的常规sort
! 也知道bang建议危险的方法,在这种情况下它修改数组。

尝试将数组作为返回值添加到函数中。

您不需要包含if / else语句。 我运行了这段代码,Codecademy接受了它。 您应该返回有序数组,然后在调用方法后将结果放入控制台。

 def alphabetize(arr, rev=false) arr.sort! return arr end puts numbers numbers = [2,1,9,3] alphabetize(numbers)