Often that may be OK, but not always. For removeSuffix() I have used
strutils.replace() sometimes as a substitute, but that is not always the best
solution.
So I was just thinking about other solutions. An apply template seems to work:
import strutils
template apply(x: typed; f: typed; par: typed): untyped =
var h = x
f(h, par)
h
const
Name = "manual.txt"
Doc = Name.replace(".txt") & ".html"
#Doc2 = Name.removeSuffix(".txt")
Doc3 = apply(Name, removeSuffix, ".txt")
Doc4 = Name.apply(removeSuffix, ".txt")
echo Doc
echo Doc3
echo Doc4
Run
manual.html
manual
manual
Run
Maybe there are even better solutions?
(Of course I understand why removeSuffix() works in place, while replace not:
The code of replace needs a temporary string as buffer, as the replacement can
be larger, so it makes sense to return that buffer. removeSuffix() can work in
place, so it does this. But sometimes a proc with result like suffixRemoved()
is what one wants.)