MST

星途 面试题库

面试题:Ruby方法参数默认值与关键字参数在复杂场景中的应用

在一个Web开发场景(假设使用Ruby on Rails框架,但不限于该框架)中,有一个处理用户请求的方法。该方法需要根据请求的来源(不同的前端设备或平台)以及请求携带的特定配置信息(如用户偏好设置等)进行不同的处理。请使用方法参数默认值和关键字参数来设计这个方法,并说明这种设计在代码维护、扩展性方面的优势。此外,考虑如何处理参数的验证和错误处理。
19.0万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试

代码示例

假设使用Ruby语言,以下是设计该方法的示例:

def process_user_request(request_source: nil, user_preferences: {})
  # 根据不同的请求来源和用户偏好设置进行不同处理
  if request_source == 'mobile'
    # 移动端处理逻辑
    if user_preferences[:theme] == 'dark'
      # 处理深色主题偏好
    end
  elsif request_source == 'desktop'
    # 桌面端处理逻辑
  end
end

优势

  1. 代码维护:通过使用方法参数默认值,使方法调用者在不需要传递特定参数时更简洁。关键字参数增强了代码的可读性,即使参数较多,也能清晰看出每个参数的作用,降低维护成本。例如在团队协作中,其他开发人员能快速理解方法所需参数及其用途。
  2. 扩展性:当需要新增请求来源或用户偏好设置时,只需在方法内部增加相应处理逻辑,调用者无需改变现有代码结构,除非需要利用新参数。如新增 tablet 请求来源,只需在方法内部增加对 tablet 的处理逻辑即可。

参数验证和错误处理

  1. 参数验证:可以在方法内部进行参数验证,例如验证 request_source 是否为预期的值。
def process_user_request(request_source: nil, user_preferences: {})
  valid_sources = ['mobile', 'desktop']
  unless valid_sources.include?(request_source)
    raise ArgumentError, "Invalid request source: #{request_source}"
  end
  # 处理逻辑
end
  1. 错误处理:对于参数验证失败,抛出 ArgumentError 异常。调用者可以使用 begin - rescue 块捕获异常并进行相应处理,例如记录错误日志或向用户返回友好的错误提示。
begin
  process_user_request(request_source: 'invalid_source', user_preferences: {})
rescue ArgumentError => e
  puts "Error: #{e.message}"
end