GraiaProject / Avilla

The next-gen framework for IM development. Powered by Graia Project.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Ryanvk 1.3, Overload v2

GreyElaina opened this issue · comments

commented

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

应该需要让用户填一个 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 类似的形式。

express 会在 1.3 实装

designed