.net 元对象构造函数中限制参数的用途?

.net 元对象构造函数中限制参数的用途?,.net,dynamic-language-runtime,.net,Dynamic Language Runtime,目前,我的DLR语言实现中存在一个问题,即对该语言中定义的方法的后续调用与对该方法的第一次调用使用的输入参数相同 所以。。。如果我用我的语言这样做: PrintType( 34 ); PrintType( 34.1 ); 。。。输出为: 整数 整数 我希望: 整数 十进制 我怀疑(但尚不能确认)该问题是由以下原因造成的: 我的调用绑定器(InvokeAction子类)生成一个适当的调用表达式,然后返回一个带有该表达式和限制的新元对象。Empty 因此,我认为可能发生的情况是,Restricti

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

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

PrintType( 34 );
PrintType( 34.1 );
。。。输出为:

整数

整数

我希望:

整数

十进制

我怀疑(但尚不能确认)该问题是由以下原因造成的:

  • 我的调用绑定器(InvokeAction子类)生成一个适当的调用表达式,然后返回一个带有该表达式和限制的新元对象。Empty

  • 因此,我认为可能发生的情况是,Restrictions参数通知DLR何时可以将此构造重新用于此方法的后续调用,并且由于我没有设置任何固有的限制,因此始终会重新使用第一个构造(对不起,我这里的术语可能是错误的……希望您能理解)

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

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


    TIA…

    你的想法是正确的。在这种情况下,您需要一个类型限制-一般来说,您希望有尽可能少的限制,以便可以从尽可能多的调用站点共享代码

    其工作方式是,在向绑定器请求规则之前,DLR正在搜索缓存的规则。这些限制将阻止缓存规则应用于新的输入集。

    非常感谢(再次)Dino。。。明白了。DLR慢慢开始有意义了。:-)