Pergunta

Para implementar -semantics "-faltando método" e como em C # 4.0, você tem que implementar IDynamicObject:

public interface IDynamicObject
{
  MetaObject GetMetaObject(Expression parameter);
}

Tanto quanto eu posso descobrir IDynamicObject é realmente parte do DLR, por isso não é novo. Mas eu não tenho sido capaz de encontrar muita documentação sobre ele.

Existem alguns exemplos de implementações muito simples lá fora (fx rel aqui e aqui ), mas poderia alguém me aponte para implementações mais completas ou alguma documentação real?

Especialmente, exatamente como você é suposto para lidar com o "parâmetro" -parameter?

Foi útil?

Solução

A resposta curta é que o MetaObject é o que é responsável por realmente gerar o código que será executado no site da chamada. O mecanismo que utiliza para isso é LINQ árvores de expressão, que tenham sido melhorados no DLR. Então, ao invés de começar com um objeto, ele começa com uma expressão que representa o objeto e, finalmente, vai necessidade de retornar uma árvore de expressão que descreve a ação a ser tomada.

Ao jogar com isto, por favor lembre-se que a versão do System.Core na CTP foi tomada a partir de um instantâneo no final de agosto. Não corresponde muito limpa para qualquer beta particular de IronPython. Uma série de mudanças foram feitas para o DLR desde então.

Além disso, para compatibilidade com o CLR v2 System.Core, as libertações de IronPython começando com qualquer beta 4 ou 5 beta tudo agora renomeação em que está no namespace System para estar no namespace Microsoft em seu lugar.

Outras dicas

Se você quer um fim a amostra final, incluindo o código fonte, resultando em um objeto dinâmico que armazena valor para propriedades arbitrárias em um dicionário, em seguida, meu post" Um primeiro olhar em Typing Pato em C # 4.0" poderia ser bom para você. Eu escrevi esse post para mostrar como objeto dinâmico pode ser convertido para interfaces de tipagem estática. Ele tem uma implementação de trabalho completo de um pato que é um IDynamicObject e podem age como um IQuack.

Se precisar de mais informações contacte-me no meu blog e vou ajudá-lo junto, tão bom quanto eu puder.

Aqui está o que eu descobri até agora:

O Dynamic Language Runtime é atualmente mantido como parte do IronPython projeto . Então esse é o melhor lugar para ir para obter informações.

A maneira mais fácil de implementar uma classe de apoio IDynamicObject parece ser derivar de Microsoft.Scripting.Actions.Dynamic e substituir os métodos relevantes, por exemplo, o Call-método para implementar a semântica chamada de função. Parece que Microsoft.Scripting.Actions.Dynamic não foi incluído no CTP, mas o de IronPython 2.0 parece que vai funcionar.

Ainda estou claro sobre o significado exato da -parameter "parâmetro", mas parece fornecer o contexto para a ligação do-objeto dinâmico.

Esta apresentação também fornece uma série de informações sobre o DLR:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top