GraiaProject / Avilla

The next-gen framework for IM development. Powered by Graia Project.
MIT License
160 stars 14 forks source link

Ryanvk 1.3, Overload v2 #137

Closed GreyElaina closed 1 year ago

GreyElaina commented 1 year ago

动机:我对目前的用法不满意。

应该需要让用户填一个 express,然后 Overload 就直接被操作着填进去。

@Fn.complex(
    TypeOverload(identity="event_type", execute_exp=lambda cx: cx.ref("event"))  # Overload 要求 express 求值出来的形式。
    #            ^^^^^^^^^^^^^^^^^^^^^^^^: Express, 执行这个 lambda 就是求值了。
    # __init__((FnOverloadEvalContext) -> Any), 这是 TypeOverload 的对 express 的签名。
)

@m.entity(fn, {"event_type": TypeOverload.build(MessageEvent)})  # collect 时要怎么办呢……

我们应该同时考虑到 execute 与 collect,所以 express 需要有两个版本吗? 签名的构造(Collect),签名的提取(Execute)。 ……只不过这里的提取,看实际情况,更多应该用 “匹配” 更妥当准确一些(Target)。

这套体系,不过是对目前已有体系的补充封装而已,但是必要的。

collect 时应该如何呢……直接 TypeOverload.build(...) 吗?我不知道。 那就这样做吧,由各个 Overload 实现自己定制,但都用 build_xxx 类似的形式。

GreyElaina commented 1 year ago

express 会在 1.3 实装

GreyElaina commented 1 year ago

designed