class Object
def scope(&block)
instance_eval(&block)
end
end
Thing = Struct.new(:city)
row = Thing.new "Bryn Athyn"
row.scope{ puts city }
#=> Bryn Athyn
Если вы не хотите обезьяна-патч для Object, вы могли бы альтернативно:
module Scopeable
def scope(&block)
instance_eval(&block)
end
end
Thing = Struct.new(:city)
row = Thing.new "Bryn Athyn"
row.extend(Scopeable)
row.scope{ puts city }
#=> Bryn Athyn
Хотя, учитывая это, возможно, проще всего просто:
class Object
alias_method :scope, :instance_eval
end
Или еще проще ... просто используйте "instance_eval" вместо "scope":)