MST

星途 面试题库

面试题:Ruby方法参数默认值与关键字参数的动态处理

假设你有一个Ruby方法,其关键字参数是一个哈希。方法内部需要根据传入的不同关键字参数,动态调整处理逻辑。请编写这样一个方法,并展示至少两种不同的关键字参数传入方式及对应的处理结果。同时,说明如果不使用关键字参数而是普通参数来实现类似功能,有哪些缺点。
27.7万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试
def dynamic_processing(**kwargs)
  if kwargs.key?(:operation)
    case kwargs[:operation]
    when :add
      result = kwargs[:a] + kwargs[:b]
      puts "执行加法操作,结果是: #{result}"
    when :multiply
      result = kwargs[:a] * kwargs[:b]
      puts "执行乘法操作,结果是: #{result}"
    else
      puts "不支持的操作"
    end
  else
    puts "未指定操作"
  end
end

# 第一种关键字参数传入方式
dynamic_processing(operation: :add, a: 2, b: 3)
# 输出: 执行加法操作,结果是: 5

# 第二种关键字参数传入方式
dynamic_processing(operation: :multiply, a: 4, b: 5)
# 输出: 执行乘法操作,结果是: 20

不使用关键字参数而使用普通参数的缺点:

  1. 可读性差:使用普通参数时,调用者需要严格按照参数顺序传入值,对于复杂的逻辑,很难直观地理解每个参数的含义。例如dynamic_processing(:add, 2, 3),很难立刻明白:add代表加法操作,参数顺序一旦弄错,结果就会错误且难以调试。
  2. 维护困难:如果方法的参数数量增多或者顺序发生改变,所有调用该方法的地方都需要相应修改。而关键字参数则不受顺序影响,只需要确保参数名正确即可,大大降低了维护成本。
  3. 扩展性差:如果后续需要添加新的参数,使用普通参数可能会导致参数列表混乱,影响原有逻辑。而关键字参数可以轻松添加新的参数,不会影响已有的调用方式。