在Ruby中为什么没有If / Then结构的If / Then逻辑写入失败?

时间:2017-01-16 21:28:11

标签: ruby if-statement

为什么下面的代码无法产生预期的输出,前两个测试用例如果我没有将“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]

2 个答案:

答案 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
最后返回数组,如果为false则返回nil。确保它在方法结束时返回数组值。 在rubyfiddle.com上测试过 http://rubyfiddle.com/riddles/c36bc/1