[英]Interpolate Method Definition
此方法在APIdock上没有描述。 我知道Ruby中的instance_exec
与JavaScript中的this
绑定机制相似。
def interpolate(sql, record = nil)
if sql.respond_to?(:to_proc)
owner.instance_exec(record, &sql)
else
sql
end
end
有人可以简要描述一下吗?
首先,必须进行respond_to?(:to_proc)
检查,以确保将sql
转换为lambda(由“& &
传递并传递给instance_exec
。为了简化起见,在这里,人们可能已经将sql
视为lambda了:
def interpolate(sql, record = nil) # assume sql is lambda
owner.instance_exec(record, &sql)
end
如instance_exec
上的文档所示:
在接收者的上下文中执行给定的块...
就是说,lambda将按照序号执行,并放置在接收方的实例方法内部。
class Owner
def initialize
@records = [:zero, :one, :two]
end
end
record_by_index = ->(idx) { @records[idx] }
Owner.new.instance_exec 1, &record_by_index #⇒ :one
上面的代码( 或多或少)等于:
class Owner
def initialize
@records = [:zero, :one, :two]
end
def record_by_index idx
@records[idx]
end
end
Owner.new.record_by_index(1) #⇒ :one
调用instance_exec
的实际参数将传递给代码块。 在Owner
实例的上下文中,我们可以访问实例变量,私有方法等。希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.