MetaObject构造函数中Restrictions参数的用途?

时间:2008-12-19 14:46:44

标签: .net dynamic-language-runtime

我目前在我的DLR语言实现中遇到一个问题,即对该语言中定义的方法的后续调用与第一次调用该方法时使用的输入参数相同。

所以...如果我用我的语言这样做:

PrintType( 34 );
PrintType( 34.1 );

...输出是:

整数

整数

我期待的地方:

整数

十进制

我怀疑(但尚未确认)该问题的结果如下:

  1. 我的调用binder(InvokeAction子类)生成一个合适的Call Expression,然后返回一个带有该表达式的新MetaObject和Restrictions.Empty

  2. 因此,我认为可能发生的是Restrictions参数通知DLR何时可以将此构造重新用于后续调用此方法,并且因为我没有固有的限制,所以第一个构造总是重复使用(对不起,我的术语可能是错的......希望你能得到这个想法)

  3. 所以...我想我需要使用为每个参数生成的限制合并...按类型,或者通过实例。

    有人可以证实或否认我的想法吗?对于我所看到的行为,我应该探索的任何其他可能性?

    ... TIA

1 个答案:

答案 0 :(得分:1)

你的想法是正确的。在这种情况下,您需要一个类型限制 - 通常您希望尽可能少地限制,以便可以从尽可能多的呼叫站点共享代码。

这种方法的工作方式是,在向活页夹询问规则之前,DLR正在搜索缓存规则。这些限制会阻止缓存的规则适用于一组新的输入。