Ruby 变量与常量的使用指南
1. 实例变量的使用与作用域问题
实例变量和局部变量一样有自己的作用域,但不同的是,实例变量的作用域不是词法作用域,它的作用域始终与方法的隐式接收者 self 相同。 def 、 class 和 module 这些作用域门控会改变实例变量的作用域, define_method 、 Class.new 和 Module.new 也会改变实例变量的作用域,因为它们有新的 self 。
在使用实例变量时,一个主要问题是在传递给不受控制的方法的块中使用它们。例如,有一个 Invoice 类,要添加一个 line_item_taxes 方法,返回每个订单项的税数组:
class Invoice
def line_item_taxes
@line_items.map do |item|
@tax_rate * item.price * item.quantity
end
end
end
这个方法在大多数情况下可行,但如果 @line_items 不是简单的 LineItem 实例数组,而是 LineItemList 类的实例,就会出现问题:
超级会员免费看
订阅专栏 解锁全文

39

被折叠的 条评论
为什么被折叠?



