https://issues.dlang.org/show_bug.cgi?id=20635

          Issue ID: 20635
           Summary: std.file.write is not UFCS friendly
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: normal
          Priority: P1
         Component: phobos
          Assignee: [email protected]
          Reporter: [email protected]

the filename is the first parameter. It would be more judicious if it was the
second. 

e.g, you cant do that for now
---
string doStuff1(string);
string doStuff2(string);

dirEntries(...)
    .map!(a => tuple(a.name, readText(a.name))
    .each!(a => a[1].doStuff1()
                    .doStuff2()
                    .write(a[0])); // oops
---

it can happen very easily, even on a simple stuff like

---
buffer.write(name);
---

The choice of the order is very poor.

Both cases presented here happened for real. At some point if you don't take
care you finish with a folder containing files with cryptic names and each of
them contains a path. Hilarious.

As UFCS mimics the beahior of member functions we can compare `std.file.write`
to something like `MemoryStream.writeToFile()` hence the "pseudo" `this` must
be for the data, not the name.

--

Reply via email to