推荐答案
def greet(name:, age:)
puts "Hello, #{name}. You are #{age} years old."
end
greet(name: "Alice", age: 30)本题详细解读
关键字参数的基本用法
在 Ruby 2.0 及以上版本中,引入了关键字参数(Keyword Arguments)。关键字参数允许你在定义方法时使用命名参数,这使得方法调用更加清晰和灵活。
def greet(name:, age:)
puts "Hello, #{name}. You are #{age} years old."
end在这个例子中,name: 和 age: 是关键字参数。调用这个方法时,必须使用相同的参数名来传递值:
greet(name: "Alice", age: 30)
默认值
关键字参数也可以设置默认值。如果调用方法时没有提供某个关键字参数,Ruby 会使用默认值。
def greet(name:, age: 25)
puts "Hello, #{name}. You are #{age} years old."
end
greet(name: "Bob") # 输出: Hello, Bob. You are 25 years old.混合使用位置参数和关键字参数
Ruby 允许在方法定义中混合使用位置参数和关键字参数。位置参数必须放在关键字参数之前。
def greet(greeting, name:, age:)
puts "#{greeting}, #{name}. You are #{age} years old."
end
greet("Hi", name: "Charlie", age: 35)关键字参数的可选性
关键字参数默认是必需的,如果调用时缺少某个关键字参数,Ruby 会抛出 ArgumentError。如果你希望某个关键字参数是可选的,可以为其设置默认值。
// www.javascriptcn.com code example
def greet(name:, age: nil)
if age
puts "Hello, #{name}. You are #{age} years old."
else
puts "Hello, #{name}. Age not provided."
end
end
greet(name: "Dave") # 输出: Hello, Dave. Age not provided.关键字参数的双星号 (**)
你可以使用双星号 (**) 来捕获所有未明确指定的关键字参数。这在你需要处理可变数量的关键字参数时非常有用。
def greet(name:, **options)
puts "Hello, #{name}."
options.each do |key, value|
puts "#{key}: #{value}"
end
end
greet(name: "Eve", age: 40, city: "New York")在这个例子中,options 是一个哈希,包含了所有未明确指定的关键字参数。
总结
关键字参数是 Ruby 中一种强大的特性,它使得方法定义和调用更加灵活和清晰。通过使用关键字参数,你可以提高代码的可读性和可维护性。