On 09/14/2018 03:10 PM, Brandon Allbery wrote:
On Fri, Sep 14, 2018 at 5:56 PM ToddAndMargo <toddandma...@zoho.com
<mailto:toddandma...@zoho.com>> wrote:
'To opt into a non-nullable version of a type add the :D
"smiley" to it."
This is confusing. And I don't think correct, but I could be wrong.
Curt stated it a lot better:
If I say "my Int $x",
$x is now an Int, but an undefined Int.
If I say "my Int $x = 42",
$x is an Int, but set to a defined value, 42.
":D" means that the variable is "defined". "non-nullable" is
a confusing way to state it.
Not exactly. "Defined" is a "now" thing; "non-nullable", via type
smileys, is an "always" thing. It is defined now, and it can never be
undefined.
To me ":D" means that the variable has something assigned to
and ":U" means that the variable has yet to have anything
assigned to it.
If I were to rewrite this, I'd reverse D and U as that
is the way they evolve. All variables start out as :U.
This is the same misunderstanding: what is now, is not guaranteed to be
so in the future. :U and :D provide such guarantees. Merely being
defined or undefined right now says nothing about the future.
Hi Brandon,
Thank you!
My use for the "smileys" is in methods definitions. It tells me
that the variable has to have a value or a null.
For instance:
multi method kv(Any:U: -->List)
multi method kv(Any:D: -->List)
is their way of saying I can use either.
Question, why don't they just say?
method kv(Any: -->List)
And "List" is really vague, as in what kind of list?
-T