I forgot to mention one other shortcut that is always available
if you do have to use `.new` (which is the case for most types).

You can write:
```
my $foo = 42;
```
The `42` on the RHS of the `=` is the shortest way to create
an integer value corresponding to `42`.

But you could also write:
```
my $foo = Int.new: 42;
```
It's odd, but you could that. You could also write:

```
my Int $foo .= new: 42;
```
Note the `.=` instead of `=` and the `new` instead of `Int.new`.

That is, if you constrain a variable's type, and want to initialize
that variable to a value of exactly that type, you don't have to
repeat the type name on the RHS of the `=` if you write it as above.

For types that have literal forms it's not helpful. And for short type
names it's helpful, but only a little. But let's say you really wanted
to write out the full `NativeCall::Types::Pointer` and you wanted a
variable constrained to that type and initialized to have a value of
that type. Now it's a big deal:

```
my NativeCall::Types::Pointer $foo .= new: 42;
```

--
raiph

Reply via email to