MyClass.solr_search do
any_of do
with :col1, 1
with :col2, 2
all_of do
with :col3, 3
without :col4, 4
end
end
end
像这样,all_of
和any_off
可以无限层嵌套,分别代表or
和and
, with
代表等于, without
代表!等于,在这样的 DSL 里面结合业务逻辑就很清晰,但是现在要使用 ElastivSearch 了,那个封装的就比较浅,没有这样的 DSL 可以用了,我想把这套思路搬出来,于是去看了源码,最深处看到两行有点懵
class ContextBoundDelegate
class <<self
def instance_eval_with_context(receiver, &block)
calling_context = eval('self', block.binding)
if parent_calling_context = calling_context.instance_eval{@__calling_context__ if defined?(@__calling_context__)}
calling_context = parent_calling_context
end
...
eval('self', block.binding)
这个什么意思呢, 顺便问一下 block 里面无限嵌套 block 的思路怎么实现