为什么下面的代码无法产生预期的输出,前两个测试用例如果我没有将“then”部分添加到'If?'我设置了第二个变量“False”的默认值,我认为在Ruby中一个方法可能需要一个未指定数量的参数,并且在调用该方法时缺少一个参数将回滚到使用默认值如果设置了该方法中的参数。
def alphabetize(arr,rev=false)
arr.sort!
if rev == true
arr.reverse!
end
end
numbers = [1,9,2,1,10]
测试用例:
print alphabetize(numbers,false)
=begin
input: numbers,false
output: nil
expected output: 1,1,2,9,10
=end
print alphabetize(numbers)
=begin
input: numbers
output: nil
expected output 1,1,2,9,10
=end
print alphabetize(numbers,true)
=begin
input: numbers,true
output: 10,9,2,1,1
expected output: 10,9,2,1,1
=end
此代码产生了预期结果:
def alphabetize(arr,rev=false)
if rev == true
arr.sort!.reverse!
else
arr.sort!
end
end
numbers = [1,9,2,1,10]
答案 0 :(得分:2)
您正在打印alphabetize
方法的返回值,该值不一定是数组的值。
在您的第一个代码中,您有一个if
没有相应的else
作为最后一个语句。在Ruby中,当if
条件失败时,没有else的nil
语句的返回值为if
。
在第二段代码中,您有if
else
语句。因此,当if
条件失败时,该方法的返回值将在else
块内执行。在这种情况下,arr.sort!
。
值得一提的是,alphabetize
方法修改了传入的numbers
数组(由!
和sort!
方法中的reverse!
表示。如果您打印numbers
,而不是返回值alphabhetize
,那么您也可以获得预期的输出。
答案 1 :(得分:0)
def alphabetize(arr,rev=false)
arr.sort!
if rev == true
arr.reverse!
end
arr
end