需要剖析这个程序! (反转数组)

时间:2018-05-02 00:47:39

标签: ruby

我并不真正了解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)}"

3 个答案:

答案 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

希望有所帮助