Durante la riproduzione in giro con D 2.0 Ho trovato il seguente problema:Come usare puri di D 2.0
Esempio 1:
pure string[] run1()
{
string[] msg;
msg ~= "Test";
msg ~= "this.";
return msg;
}
Questo compila e funziona come previsto.
Quando provo ad avvolgere la matrice di stringhe in una classe che trovo non riesco a far funzionare tutto questo:
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;
}
Questo codice non verrà compilato perché la funzione addMsg è impuro. Non riesco a rendere tale funzione pura poiché altera l'oggetto TestPure. Mi manca qualcosa? O è una limitazione?
Di seguito si compila:
pure TestPure run3()
{
TestPure t = new TestPure();
t.msg ~= "Test";
t.msg ~= "this.";
return t;
}
Può la ~ = operatore non stata implementata in funzione impura della matrice msg? Come mai il compilatore non si lamenta di ciò nella funzione run1?
Ho cercato di ripulire il tag [tag: pure], perché a volte si riferisce a pure funzioni virtuali, a volte a [puro] (http://beebole.com/pure/) ea volte a [puro] (http://en.wikipedia.org/wiki/Pure_ (programming_language)) - tra gli altri. Ma non so nulla di [tag: d2]. Potresti confermare se la modifica del mio tag è appropriata? Potrebbe [tag: puramente funzionale] funzionare per questa domanda - Ho creato [tag: pure-function], quindi se [tag: purely-functional] funziona penso che sarebbe meglio usare il tag esistente. –