[Tutor] What's the logic behind parameters and arguments?
steve at pearwood.info
Tue Mar 29 11:55:56 CEST 2011
> Dear list readers,
> the command find() takes two parameters, start and end, e.g.:
> find(substring[, start[, end]]).
> Here, a substring is located UP TO BUT NOT INCLUDING the optional
> parameter 'end'.
> Compare this to replace(). replace() comes with the count argument, e.g.:
> replace(old, new[, count])
> But here the substring is replaced UP TO AND INCLUDING to the optional
> argument count.
> My question is how I am best to make sense of this discrepancy. Is there
> any logic behind this that might make my life easier once I become aware
> of it? I know of the indexing rules, but this here is obviously not the
> same. I am curious...
The two functions do different things, they work differently, they take
replace takes an inclusive `count` parameter because that's the most
sensible and obvious way to implement a count parameter. "I want to
replace the first five words" suggests a count parameter of 5, not 6. A
count of 1 should replace 1 time, not 0 times.
The start and end parameters of find work like slices, where the
arguments act to slice *between* items:
So, completely different, and there's no discrepancy.
As for the question why replace doesn't take a start and end argument
like find, *shrug* perhaps it should. But it already has three
parameters, another two will start overloading it.
More information about the Tutor