0

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

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

PrintType( 34 );
PrintType( 34.1 );

...输出是:

整数

整数

我期望的地方:

整数

十进制

我怀疑(但还不能确认)问题是由以下原因引起的:

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

  2. 因此,我认为可能发生的情况是 Restrictions 参数通知 DLR 何时可以将此构造重新用于对该方法的后续调用,并且由于我没有设置固有限制,因此始终重新使用第一个构造(抱歉,我这里的术语可能是错误的......希望你明白)

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

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

蒂亚...

4

1 回答 1

1

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

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

于 2008-12-19T17:37:58.190 回答