librime-lua icon indicating copy to clipboard operation
librime-lua copied to clipboard

Memory dev: changed args or LuaMemory::LuaMemory and LuaMemory::memorize()

Open shewer opened this issue 3 years ago • 4 comments

issue : MemoryReg 異動

shewer avatar Sep 24 '22 10:09 shewer

不赞同。这样又改变接口了,也没有明显的好处。

hchunhui avatar Oct 04 '22 08:10 hchunhui

不赞同。这样又改变接口了,也没有明显的好处。

  • 初始化 不影響 ,增加argv[4] callback 且可以直接掛上 callback
  • env.mem:memorize( function(commit) callback(env.mem, commit) end ) -- env.mem 得再掛入Anonymous function 沒有意義呀 ,env.mem 等同 self,
  • 修改後 env.mem:memorize( function(mem,commit) ..... end) -- 可以 盡可能不用調用外部變數
  • 改變的是 memorize( callback) callback的 參數(commit) --> (mem, commit)

shewer avatar Oct 04 '22 09:10 shewer

* 改變的是 memorize( callback)   callback的 參數(commit) --> (mem, commit)

是的,就是这里要改变。另外 callback 不一定需要 env.mem,也有可能需要其他参数,既然 anonymous function 可以绑定任意参数,所以不如统一不带,由用户自己决定。

hchunhui avatar Oct 04 '22 12:10 hchunhui

是的,就是这里要改变。另外 callback 不一定需要 env.mem,也有可能需要其他参数,既然 anonymous function 可以绑定任意参数,所以不如统一不带,由用户自己决定。

LuaMemory callback_commit ,我的理解 是 commit 時處理 commitEntry to userdb 要處理 userdb 須要 mem 及 commitEntry 當OnCommit時 Momory 會產生 <commitEntry> entry and entry.save() --> 呼叫 Memory::Memorize() --> LuaObj( this, entry)

callback 是外部function 須要 將 memory 自身 及 commitEntrys 傳遞 給callback 才能 由callback 處理 userdb.


callback 是 LuaMemoryze::Memorize()
把 commitEntrys update userdb

Memory::OnCommit(ctx) 取出commit candidate 轉置 commitentrys call Memorize() 將 CommitEntrys commit to userdb

要如何自定引數? 我能想到的方式是用

local function gen_callback( args)
     return function(mem,commit) 
          ... ...
     end
end
env.mem:memorize( gen_callback( args) ) 

env.mem:memorize( wrap_func( ...) .... return function(mem,commit) .... end end)

https://github.com/rime/librime/blob/f931b5bba731a1543634023f688563e546cd5107/src/rime/gear/memory.h#L40 Memory::OnCommit() https://github.com/rime/librime/blob/f931b5bba731a1543634023f688563e546cd5107/src/rime/gear/memory.cc#L103-L120 OnCommit(ctx) -- CommitEntry:Save() --> Memorize() this(mem) and entry_commit

shewer avatar Oct 04 '22 13:10 shewer