Optional parameters?
Steven Schveighoffer
schveiguy at yahoo.com
Mon Apr 2 12:50:33 UTC 2018
On 4/2/18 5:31 AM, Timoses wrote:
> On Sunday, 1 April 2018 at 15:54:16 UTC, Steven Schveighoffer wrote:
>> I currently have a situation where I want to have a function that
>> accepts a parameter optionally.
>>
>> I thought maybe Nullable!int might work:
>>
>> void foo(Nullable!int) {}
>>
>> void main()
>> {
>> foo(1); // error
>> int x;
>> foo(x); // error
>> }
>
>
> Can somebody enlighten me what this topic is about?
>
> I thought an optional parameter would be as easy as
>
> void foo(int i = 0) { writeln(i); }
>
> void main()
> {
> int x;
> foo(x);
> foo(1);
> foo();
> }
>
> Is the Nullable!int approach because 'i' would always "optionally" be 0
> if not passed with above 'foo'?
I'm talking about optionals as they are in other languages, such as
Swift: https://en.wikipedia.org/wiki/Option_type
In other words, there is a distinct state of "not provided" from the
other values it might take.
Nullable works to fill this purpose, but I didn't realize that I'd have
to wrap all calls to it. I was hoping for something more like Swift's
option types. In Swift, I would do:
function foo(x: Int?)
And I can check x to see if it's nil inside the function. I can just
call foo with a plain Int and it works fine. Int implicitly casts to
Int?, but Int? needs an explicit conversion to Int. That was the
relationship I was looking for. Apparently, not attainable in D, unless
you do it on initialization.
-Steve
More information about the Digitalmars-d-learn
mailing list