ich viele temporären Variablen in Haskell zu erstellen:Vermeiden Sie temporäre Variablen mit Namen mit Shadowing
main = do
let nums'' = [1..10]
let nums' = a . bunch . of_ . functions $ nums''
let nums = another . bunch . of_ . functions $ nums'
print nums
Das heißt, ich will nicht, eine lange Kette von Funktionen wie so schreiben:
let nums = another . bunch . of_ . functions . a . bunch . of_ . functions $ [1..10]
Da es für mich unlesbar wird, versuche ich, die Funktionen entsprechend ihrer Arbeit zu gruppieren. In diesem Prozess erstelle ich eine Menge hässlicher temporärer Variablen wie nums''
und nums'
(ich könnte ihnen sinnvollere Namen geben, aber der Punkt steht immer noch ... jede neue Zeile bedeutet eine neue Variable). Dies ist ein Fall, in dem eine schattierte Variable saubereren Code ergeben würde. Ich möchte etwas tun wie:
let nums = [1..10]
nums = a . bunch . of_ . functions $ nums
nums = another . bunch . of_ . functions $ nums
I.e. genau wie oben, aber ohne die temporären Variablen. Gibt es eine Möglichkeit, dies in Haskell zu tun?
atomically $ do
(...this code...)
return nums
Etwas, das Haskell würde wissen, dass der Code in diesem Abschnitt beschatteten Variablen enthält, und es sollte nur über das Endergebnis Sorge: Vielleicht könnte das Ganze in einer „Transaktion“ eingewickelt werden. Ist das möglich?
Sie auch den Staat Monade verwenden könnten, wenn Sie, ohne eine Reihe von Namen einen Wert zu übergeben entlang ohne Mutation noch wollen – amindfv
ich kann, dass (a) argumentieren, wenn Sie von Bedeutung haben Namen, um die Zwischenschritte zu geben, gibt es kein Problem; und (b) wenn Sie keine aussagekräftigen Namen haben, um die Zwischenschritte zu machen, dann gibt es keinen Vorteil, sie aufzulösen. Und aus (a) und (b) können wir schließen, dass es kein Problem gibt. Es hängt natürlich davon ab, ob Sie die Räumlichkeiten akzeptieren. –
Ich bin nicht damit einverstanden, dass die Wiederverwendung des gleichen Namens für verschiedene Zwecke es notwendigerweise lesbarer macht. Nun muss der Leser herausfinden, auf welche Variable sich jedes Ereignis bezieht. – augustss