librelist archives

« back to archive

关于rule index功能的进展,大大加强了适

关于rule index功能的进展,大大加强了适

From:
Tang Daogang
Date:
2012-07-21 @ 12:05
今天关于rule index功能有了一个比较大的进展,大大加强了适用的场合.

具体增加的特性是:
1. 当使用函数作为filter 的query_args时,在函数中可以使用外面 定义的局部的干净(没有元表)的table了;
2. 使用' ^_^ ' 来代替原来的' '作规则中元素的分隔符;


限制upvalue的table不能有元表的考虑在于:

1. 序列化时,要剥离元表;反序列化时,要恢复,比较困难(情况很多),元表的暂存储是个问题;

2. 即使不用元表,也能处理几乎所有遇到的情况了;



下面是验证程序。

Img = require 'models.img'    -- 注意,这句前面没有加 local

local a = {b=2}

local ttt = Img:filter(function(p)

table.insert(a, '1');       -- 用全局的函数,不会被当成upvalue

print(a)                         -- 用全局的函数,不会被当成upvalue,没有元表的table a,可以正常使用

Img:getById(1)            -- Img目前是模块中的全局变量,不会被当成upvalue

if a.b==2 and p.visible == 'YES' then    -- 外面的表a,
不能有元表。能被正常序列化。在这里面,更不能使用元表中定义的方法。写法上没那么自由,有一定限制。

return true

end

end)

local bhimages = Img:filter({visible="YES", namelevel1=contains('prints')},
-12, -1, 'rev')

这两句话,对应下面的第一,二条规则。

1) "function ^_^ | ^_^ \x1bLuaQ\x00\x01\x04\x04\x04\b\x00\x16\x00\x00\x00@

./app/artgallery.lua\x00&\x00\x00\x00-\x00\x00\x00\x01\x01\x00\x04\x16\x00\x00\x00E\x00\x00\x00F@

\xc0\x00\x84\x00\x00\x00\xc1\x80\x00\x00\\@\x80\x01E\xc0\x00\x00\x84\x00\x00\x00\\@\x00\x01E\x00\x01\x00K@

\xc1\x00\xc1\x80\x01\x00\\@\x80\x01D\x00\x00\x00F\xc0\xc1\x00\x17\x00\xc2\x00\x16\x00\x01\x80F@B
\x00\x17\x80\xc2\x00\x16@

\x00\x80B\x00\x80\x00^\x00\x00\x01\x1e\x00\x80\x00\x0b\x00\x00\x00\x04\x06\x00\x00\x00table\x00\x04\a\x00\x00\x00insert\x00\x04\x02\x00\x00\x001\x00\x04\x06\x00\x00\x00print\x00\x04\x04\x00\x00\x00Img\x00\x04\b\x00\x00\x00getById\x00\x03\x00\x00\x00\x00\x00\x00\xf0?\x04\x02\x00\x00\x00b\x00\x03\x00\x00\x00\x00\x00\x00\x00@\x04\b\x00\x00\x00visible\x00\x04\x04\x00\x00\x00YES\x00\x00\x00\x00\x00\x16\x00\x00\x00'\x00\x00\x00'\x00\x00\x00'\x00\x00\x00'\x00\x00\x00'\x00\x00\x00(\x00\x00\x00(\x00\x00\x00(\x00\x00\x00)\x00\x00\x00)\x00\x00\x00)\x00\x00\x00)\x00\x00\x00*\x00\x00\x00*\x00\x00\x00*\x00\x00\x00*\x00\x00\x00*\x00\x00\x00*\x00\x00\x00*\x00\x00\x00+\x00\x00\x00+\x00\x00\x00-\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00p\x00\x00\x00\x00\x00\x15\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00a\x00
^_^ |^_^ a ^_^ {[\"b\"]=2} ^_^ table"

2) "and ^_^ | ^_^ namelevel1 ^_^ contains ^_^ prints ^_^ | ^_^ visible ^_^
YES ^_^ |"






-- 
Nothing is impossible.