推荐答案
在 Ruby 中,可以通过在方法定义时为参数指定默认值来设置方法参数的默认值。具体语法如下:
def greet(name = "Guest")
puts "Hello, #{name}!"
end
greet # 输出: Hello, Guest!
greet("Alice") # 输出: Hello, Alice!在这个例子中,name 参数的默认值是 "Guest"。如果调用 greet 方法时没有传递参数,name 将使用默认值 "Guest"。
本题详细解读
1. 默认参数的基本用法
在 Ruby 中,方法参数的默认值是通过在参数名后使用 = 符号来指定的。如果调用方法时没有传递该参数,Ruby 会自动使用默认值。
def calculate_total(price, tax_rate = 0.1)
total = price + (price * tax_rate)
puts "Total amount: #{total}"
end
calculate_total(100) # 输出: Total amount: 110.0
calculate_total(100, 0.15) # 输出: Total amount: 115.0在这个例子中,tax_rate 参数的默认值是 0.1。如果调用 calculate_total 方法时只传递了 price 参数,tax_rate 将使用默认值 0.1。
2. 多个默认参数
Ruby 允许为多个参数设置默认值。需要注意的是,默认参数通常放在参数列表的末尾。
def register_user(name, age = 30, country = "USA")
puts "Name: #{name}, Age: #{age}, Country: #{country}"
end
register_user("Bob") # 输出: Name: Bob, Age: 30, Country: USA
register_user("Alice", 25) # 输出: Name: Alice, Age: 25, Country: USA
register_user("Charlie", 40, "Canada") # 输出: Name: Charlie, Age: 40, Country: Canada在这个例子中,age 和 country 参数都有默认值。如果调用 register_user 方法时只传递了 name 参数,age 和 country 将分别使用默认值 30 和 "USA"。
3. 默认参数与关键字参数
Ruby 2.0 引入了关键字参数,可以与默认参数结合使用。
def create_profile(name, age: 30, country: "USA")
puts "Name: #{name}, Age: #{age}, Country: #{country}"
end
create_profile("Dave") # 输出: Name: Dave, Age: 30, Country: USA
create_profile("Eve", age: 25) # 输出: Name: Eve, Age: 25, Country: USA
create_profile("Frank", country: "UK") # 输出: Name: Frank, Age: 30, Country: UK在这个例子中,age 和 country 是关键字参数,并且都有默认值。调用 create_profile 方法时,可以只传递 name 参数,或者选择性覆盖 age 和 country 的默认值。
4. 默认参数的注意事项
- 默认参数的位置:默认参数通常放在参数列表的末尾,以避免在调用方法时产生歧义。
- 默认值的计算:默认值在方法定义时计算,而不是在方法调用时计算。因此,如果默认值是一个可变对象(如数组或哈希),它将在所有方法调用之间共享。
def add_item(item, list = [])
list << item
puts list.inspect
end
add_item("apple") # 输出: ["apple"]
add_item("banana") # 输出: ["apple", "banana"]在这个例子中,list 参数的默认值是一个空数组。由于默认值在方法定义时计算,所有调用 add_item 方法时都会共享同一个数组。