Thread overview | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
January 22, 2011 more naming | ||||
---|---|---|---|---|
| ||||
OK, so we have replace(haystack, needle, nail) which replaces _all_ occurrences of needle in haystack with nail. How would you call a function that replaces only the _first_ occurrence of needle with nail? Must be a distinct function, not a runtime parameter to the existing function. This is because the function that replaces only one occurrence only requires nail to be an input range. Andrei |
January 22, 2011 Re: more naming | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrei Alexandrescu | What if you want to replace a _count_ number of occurrences of needle in haystack with nail? That's what Python's replace does, although I think that only works for strings in Python. |
January 22, 2011 Re: more naming | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrei Alexandrescu | On 23/01/11 03:27, Andrei Alexandrescu wrote:
> OK, so we have replace(haystack, needle, nail) which replaces _all_
> occurrences of needle in haystack with nail. How would you call a
> function that replaces only the _first_ occurrence of needle with nail?
>
> Must be a distinct function, not a runtime parameter to the existing
> function. This is because the function that replaces only one occurrence
> only requires nail to be an input range.
>
>
> Andrei
If you articulate this question to yourself over and over until you understand the *salient* problem (i.e. the real problem that sticks out) you will answer your own question and then have no need to resort to newsgroup answers.
If you are feeling lost, a good tactic to solve your problem is to think about function signatures in all their D glory not forgetting, of course, about D's innovative transitive xxx (const/immutable) constructs to include in the specification of your function(s).
Justin
|
January 22, 2011 Re: more naming | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrej Mitrovic | On 1/22/11 10:47 AM, Andrej Mitrovic wrote:
> What if you want to replace a _count_ number of occurrences of needle
> in haystack with nail? That's what Python's replace does, although I
> think that only works for strings in Python.
A specific count is rare but can be added as a defaulted parameter. The only problem is that one is special because it accepts a weaker range as replacement.
Andrei
|
January 22, 2011 Re: more naming | ||||
---|---|---|---|---|
| ||||
Posted in reply to Justin Johansson | On 1/22/11 11:03 AM, Justin Johansson wrote:
> On 23/01/11 03:27, Andrei Alexandrescu wrote:
>> OK, so we have replace(haystack, needle, nail) which replaces _all_
>> occurrences of needle in haystack with nail. How would you call a
>> function that replaces only the _first_ occurrence of needle with nail?
>>
>> Must be a distinct function, not a runtime parameter to the existing
>> function. This is because the function that replaces only one occurrence
>> only requires nail to be an input range.
>>
>>
>> Andrei
>
> If you articulate this question to yourself over and over until you
> understand the *salient* problem (i.e. the real problem that sticks out)
> you will answer your own question and then have no need to resort to
> newsgroup answers.
>
> If you are feeling lost, a good tactic to solve your problem is to think
> about function signatures in all their D glory not forgetting, of
> course, about D's innovative transitive xxx (const/immutable) constructs
> to include in the specification of your function(s).
>
> Justin
Now I am feeling lost indeed :o).
Andrei
|
January 22, 2011 Re: more naming | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrei Alexandrescu | 2011/1/22 Andrei Alexandrescu <SeeWebsiteForEmail@erdani.org>: > OK, so we have replace(haystack, needle, nail) which replaces _all_ occurrences of needle in haystack with nail. How would you call a function that replaces only the _first_ occurrence of needle with nail? > > Must be a distinct function, not a runtime parameter to the existing function. This is because the function that replaces only one occurrence only requires nail to be an input range. > > > Andrei > It sounds like the current replace should be named replaceAll. Torarin |
January 22, 2011 Re: more naming | ||||
---|---|---|---|---|
| ||||
Posted in reply to Torarin | > It sounds like the current replace should be named replaceAll.
>
> Torarin
replaceAll
replaceN
replaceFirst
replaceLast
|
January 22, 2011 Re: more naming | ||||
---|---|---|---|---|
| ||||
Posted in reply to Torarin | On 1/22/11 11:38 AM, Torarin wrote:
> 2011/1/22 Andrei Alexandrescu<SeeWebsiteForEmail@erdani.org>:
>> OK, so we have replace(haystack, needle, nail) which replaces _all_
>> occurrences of needle in haystack with nail. How would you call a function
>> that replaces only the _first_ occurrence of needle with nail?
>>
>> Must be a distinct function, not a runtime parameter to the existing
>> function. This is because the function that replaces only one occurrence
>> only requires nail to be an input range.
>>
>>
>> Andrei
>>
>
> It sounds like the current replace should be named replaceAll.
>
> Torarin
That's what I'm fearing - changing current replace to replaceAll and adding replace with the meaning of replaceFirst would silently change the semantics of existing code.
Andrei
|
January 22, 2011 Re: more naming | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrei Alexandrescu | Am 22.01.2011 18:46, schrieb Andrei Alexandrescu:
> On 1/22/11 11:38 AM, Torarin wrote:
>> 2011/1/22 Andrei Alexandrescu<SeeWebsiteForEmail@erdani.org>:
>>> OK, so we have replace(haystack, needle, nail) which replaces _all_
>>> occurrences of needle in haystack with nail. How would you call a
>>> function
>>> that replaces only the _first_ occurrence of needle with nail?
>>>
>>> Must be a distinct function, not a runtime parameter to the existing
>>> function. This is because the function that replaces only one occurrence
>>> only requires nail to be an input range.
>>>
>>>
>>> Andrei
>>>
>>
>> It sounds like the current replace should be named replaceAll.
>>
>> Torarin
>
> That's what I'm fearing - changing current replace to replaceAll and
> adding replace with the meaning of replaceFirst would silently change
> the semantics of existing code.
>
> Andrei
IMHO replace (without eny suffix) sounds like it replaces every occurence.
So just add replaceFirst for a function that replaces only the first occurence :)
Cheers,
- Daniel
|
January 22, 2011 Re: more naming | ||||
---|---|---|---|---|
| ||||
Posted in reply to Torarin | Torarin wrote:
> It sounds like the current replace should be named replaceAll.
That would break lots of existing code, and it doesn't seem to fit.
If replacing only the first element means it can take a special range, whereas all other n is is the same, it seems obvious that replaceFirst be the special function (that's what I'd call it too) and normal replace be either:
a) Kept exactly as it is
b) Add a runtime parameter:
string replace(string item, string replaceWhat, string replaceWith, int howMany =
int.max);
So it stays the same as it is now by default, but can cover any number of items in the same way.
If n == infinity was a special case for algorithm or input, it'd make sense to give it a special name (though still big points against it because of inertia). But it isn't. n==1 is special, but n != 1 is always the same.
So I'd say go replaceFirst.
|
Copyright © 1999-2021 by the D Language Foundation