检查方法的真实性是否也在条件语句(if)中运行它?

时间:2016-11-11 21:07:29

标签: ruby methods

  def add
    puts "\nAdd a restaurant\n\n".upcase
    restaurant = Restaurant.new

    print "Restaurant name: "
    restaurant.name = gets.chomp.strip

    if restaurant.save
      puts "\nRestaurant Added\n\n"
    else
      puts "\nSave Error: Restaurant not added\n\n"
    end
  end

  def save
    return false unless Restaurant.file_usable?
    File.open(@@filepath, 'a') do |file|
      file.puts "#{[@name, @cuisine, @price].join("\t")}\n"
    end
    return true
  end

我正在学习如何使用Ruby编写代码。方法add创建一个新实例,然后将其保存到文件中(使用方法save)。在条件if中,我很想知道如何调用save,因为它从未被直接调用过。

我知道当你在if条件中放入一个方法并且不使用任何运算符(即:=,==等)时,你正在检查"真实性"该声明的返回值。但是在条件中放一个方法也会运行吗?如果没有,为上述示例如何调用方法save

2 个答案:

答案 0 :(得分:3)

当然,该方法被调用,执行并且其返回值用作if条件。

回顾一下:只有nilfalse为假值,其他任何值都被视为truthy

答案 1 :(得分:1)

请注意,有时您需要评估使用nil参数引发异常的方法的真实性。 避免例外的一种可能性是:

if !parameter.nil? && method_which_needs_a_non_nil_parameter(parameter) then
  do_something
end

在这种情况下,如果参数为nil,则根本不会调用method_which_needs_a_non_nil_parameter