为什么在这里使用的除非声明,在我的脑海中有一段时间是正确的?

时间:2016-08-27 13:17:50

标签: ruby conditional controls

上司(编码员)给我的代码进行剖析和理解。一条逻辑正在努力,因为我无法正确看待它。他们正在度假,无法使用。

def check_in_guests(guests)
  checked_in_guests = 0
  return checked_in_guests unless is_available?(guests)

  guests.each do |guest|
    next unless guest.sufficient_funds_for_entry?(@room_cost)

    check_in_guest(guest)
    checked_in_guests += 1
  end
end

除非is_available?在那里不起作用。

def is_available?(guests)
  return number_of_guests <= free_spaces && free_spaces != 0
end

如果有多个guest虚拟机而不是空闲空间,则该函数返回false。但是,如果有多个guest虚拟机而不是可用空间,则上述代码将运行并执行相关操作,这些操作只应在guest虚拟机低于可用空间时运行。有任何想法吗?我的老师弄错了吗?它应该是而不是除非?我错过了什么吗?

由于

1 个答案:

答案 0 :(得分:0)

def check_in_guests(guests)
  checked_in_guests = 0
  return checked_in_guests unless is_available?(guests)

  guests.each do |guest|
    next unless guest.sufficient_funds_for_entry?(@room_cost)

    check_in_guest(guest)
    checked_in_guests += 1
  end
end

def is_available?(guests)
  return number_of_guests <= free_spaces && free_spaces != 0
end

如果is_available?返回false,则代码正在执行的操作是返回已签入来宾的总数。您可以将unless视为if not。然后我们可以查看is_available?方法,我将假设number_of_guestsguests.length相同,同时假设guests作为数组传入。看起来这个方法是一个类的一部分,所以我猜测free_spaces是先前定义的。

让我们使用一些具体的例子,比如你有10个空闲空间和15位客人,没有办法检查每个人,所以number_of_guests小于free_spaces,所以is_available?返回false ,check_in_guests返回checked_in_guests and not execute the。each`块。

如果有10个空格和5个guest,则return语句不会执行,我们执行.each块。