我并不真正了解rev=false
之后的def alphabetize
部分:
def alphabetize (arr, rev=false)
或部分:
if rev
如果有人能够用简单的语言向我解释这一点,那就太棒了。当我
搜索这个问题,就我所理解的工作方式提供帮助,但我不会得到arr=false
或最后一行。
puts "Z-A: #{alphabetize(books, true)}"
我确信那些通过CodeAcademy学习的人会很感激答案。这是供参考的代码。
def alphabetize (arr, rev=false)
if rev
arr.sort { |item1, item2| item2 <=> item1 }
else
arr.sort { |item1, item2| item1 <=> item2 }
end
end
books = ["Heart of Darkness", "Code Complete", "The Lorax","The Prophet", "Absalom"]
puts "A-Z: #{alphabetize(books)}"
puts "Z-A: #{alphabetize(books, true)}"
答案 0 :(得分:0)
rev = false - 这只是rev的默认值,因此您可以使用或不使用第二个参数调用该函数。
#{} - 在字符串中使用允许你转义字符串,这意味着它执行大括号之间的代码,这与“Z-A:”+ alphabetize(books,true)相同
答案 1 :(得分:0)
def foo(bar="baz", c=4)
语法称为“默认参数”。这意味着如果没有参数传递给函数,则参数将采用默认值。例如,在foo("boo")
中,您已将bar
传递为"boo"
,但由于您尚未传递c
的值,因此它将为4
},默认情况下。
默认参数的概念也存在于关键字参数中。讨论关键字参数和默认参数之间的差异in this question。
答案 2 :(得分:0)
这是一种为你的功能设置默认参数的方法,以防你没有通过,例如
def add(a, b, format=true)
if format
"a + b = #{a+b}"
else
a+b
end
end
在上面的示例中,您可以使用add
值调用函数format
,如果只是将其称为add(2,3)
,则format
的值将为add(2,3,false)
是的,但您可以选择通过执行puts "A-Z: #{alphabetize(books)}"
编辑1
在您的示例中,当您执行alphabetize
时,您没有传递第二个参数,因此在rev
函数中,false
获取默认的arr.sort { |item1, item2| item1 <=> item2 }
值,因此它转到else阻止并返回puts "Z-A: #{alphabetize(books, true)}"
但是,当您使用true
中的第二个参数调用方法时,您正在传递rev
,这会覆盖方法中的默认值rev
,因此arr.sort { |item1, item2| item2 <=> item1 }
是的,它会进入if块并返回argp
。
希望有所帮助