Si bien jugar con D 2.0 He encontrado el siguiente problema:Cómo utilizar pura en D 2.0
Ejemplo 1:
pure string[] run1()
{
string[] msg;
msg ~= "Test";
msg ~= "this.";
return msg;
}
Esto compila y funciona como se esperaba.
Cuando trato de envolver la matriz de cadenas en una clase Encuentro que no puedo conseguir que esto funcione:
class TestPure
{
string[] msg;
void addMsg(string s)
{
msg ~= s;
}
};
pure TestPure run2()
{
TestPure t = new TestPure();
t.addMsg("Test");
t.addMsg("this.");
return t;
}
Este código no se compilará porque la función addMsg es impuro. No puedo purificar esa función ya que altera el objeto TestPure. ¿Me falta algo? ¿O es esto una limitación?
La siguiente se compila:
pure TestPure run3()
{
TestPure t = new TestPure();
t.msg ~= "Test";
t.msg ~= "this.";
return t;
}
¿No sería el operador = ~ sido implementado como una función impura de la matriz msg? ¿Cómo es que el compilador no se queja de eso en la función run1?
He estado tratando de limpiar la etiqueta [tag: pure], porque a veces se refiere a funciones virtuales puras, a veces a [puro] (http://beebole.com/pure/) y, a veces a [puro] (http://en.wikipedia.org/wiki/Pure_ (programming_language)) - entre otros. Pero no sé nada sobre [tag: d2]. ¿Podría confirmar si la edición de mi etiqueta es apropiada? ¿Funcionaría [tag: puramente funcional] para esta pregunta? Creé [tag: pure-function], así que si [tag: pure-functional] funciona, creo que sería mejor usar la etiqueta existente. –