Re: Question about "colon syntax" for calling other methods on 'self' inside a method

2019-11-19 Thread Brad Gilbert
$ by itself is a an anonymous state variable.

So these two lines would be exactly the same.

$.foo
(state $).foo

A feature was added where $.foo would instead be used for public attributes.
Since a public attribute just adds a method, it was allowed to use it to
call any method.
Which probably made it simpler to add.
(Note that calling a method on an anonymous variable doesn't make much
sense anyway, so there is no big loss.)

Basically it was made so that these two lines would be the same:

$.foo
$( self.foo() )

Using : on the method was probably just overlooked, because that is not
what that feature is meant for.

On Tue, Nov 19, 2019 at 12:04 AM Raymond Dresens 
wrote:

> Hello Vadim, Yary,
>
> Thanks for your feedback,
>
> I've filed an issue: https://github.com/rakudo/rakudo/issues/3306
>
> Yary, about the dollar sign,
>
> The snippet of code in the issue shows that expression "$.attribute"
> inside a method 'just works' for accessing individual attributes (or
> rather: implicitly invoking their accessors?), suggesting [to me] that the
> variable '$' can be used in the context of method lookup on "self". I would
> expect that it would work too when I try to invoke an attribute as a
> method...
>
> ...though solely printing '$' in a method yields "(Any)", not the same as
> printing "self"! Indeed: there's more going on that meets the eye, which
> makes me curious ;) Perhaps the docs mention why, I'll look for that when I
> have the opportunity to do so,
>
> Regards,
>
> Raymond.
>
> On Mon, 18 Nov 2019 at 18:13, Vadim Belman  wrote:
>
>>
>> I would say filing an issue might make sense in this case. Here is a
>> related comment from Jonathan:
>> https://github.com/rakudo/rakudo/issues/3222#issuecomment-539915286 –
>> and it explicitly states that $. is a shortcut for method calling.
>> Therefore, use of colon instead of braces should be a valid construct.
>>
>> Best regards,
>> Vadim Belman
>>
>> On Nov 18, 2019, at 11:40 AM, yary  wrote:
>>
>> I take that back! What is the dollar sign doing there in the '$.print:
>> ..." example?
>>
>> Try it without the dollar sign. Right now you're calling .print on the
>> anonymous variable '$'
>>
>> -y
>>
>>
>> On Mon, Nov 18, 2019 at 8:38 AM yary  wrote:
>>
>>> looks like a bug to me-file an issue on the rakudo GitHub
>>>
>>> On Sat, Nov 16, 2019 at 5:29 AM Raymond Dresens <
>>> raymond.dres...@gmail.com> wrote:
>>>
 Hello,

 I have a question related to the 'colon syntax' of Raku, which allows
 you to call methods without parenthesis like this:

 class Foo
 {
 method print($x, $y)
 {
 say "bar: {$x}, {$y}"
 }
 }

 my $a = Foo.new;

 $a.print: 3, 5; # ...this is what i mean with "colon syntax" ;)

 It is possible to use this syntax to call methods on 'self' as well:

 class Bar is Foo
 {
 method printDefault
 {
 self.print: 8, 12
 }
 }

 my $b = Bar.new;

 $b.printDefault;

 I use $. rather than 'self' in order to work with attributes inside
 methods in my classes, well, ... mostly, because it does not seem
 possible to do this (in rakudo, at least version 2019.07.1):

 class Baz is Foo
 {
 method printDefault
 {
 $.print: 8, 12
 }
 }

 This yields a "Confused" error, stating that it expects a so-called
 'colon pair'.

 Is this intentional? Because I'm kind of confused as well about this,

 I can live with this 'syntactical quirk', but I just keep wondering
 about it because I'd personally expect that this "$.methodname: $args"
 variant should "just work" as well...

 ...so "what gives"? ;)

 Thanks for your insights!

 Regards,

 Raymond.

>>> --
>>> -y
>>>
>>
>>


Re: Question about "colon syntax" for calling other methods on 'self' inside a method

2019-11-18 Thread Raymond Dresens
Hello Vadim, Yary,

Thanks for your feedback,

I've filed an issue: https://github.com/rakudo/rakudo/issues/3306

Yary, about the dollar sign,

The snippet of code in the issue shows that expression "$.attribute" inside
a method 'just works' for accessing individual attributes (or rather:
implicitly invoking their accessors?), suggesting [to me] that the variable
'$' can be used in the context of method lookup on "self". I would expect
that it would work too when I try to invoke an attribute as a method...

...though solely printing '$' in a method yields "(Any)", not the same as
printing "self"! Indeed: there's more going on that meets the eye, which
makes me curious ;) Perhaps the docs mention why, I'll look for that when I
have the opportunity to do so,

Regards,

Raymond.

On Mon, 18 Nov 2019 at 18:13, Vadim Belman  wrote:

>
> I would say filing an issue might make sense in this case. Here is a
> related comment from Jonathan:
> https://github.com/rakudo/rakudo/issues/3222#issuecomment-539915286 – and
> it explicitly states that $. is a shortcut for method calling. Therefore,
> use of colon instead of braces should be a valid construct.
>
> Best regards,
> Vadim Belman
>
> On Nov 18, 2019, at 11:40 AM, yary  wrote:
>
> I take that back! What is the dollar sign doing there in the '$.print:
> ..." example?
>
> Try it without the dollar sign. Right now you're calling .print on the
> anonymous variable '$'
>
> -y
>
>
> On Mon, Nov 18, 2019 at 8:38 AM yary  wrote:
>
>> looks like a bug to me-file an issue on the rakudo GitHub
>>
>> On Sat, Nov 16, 2019 at 5:29 AM Raymond Dresens <
>> raymond.dres...@gmail.com> wrote:
>>
>>> Hello,
>>>
>>> I have a question related to the 'colon syntax' of Raku, which allows
>>> you to call methods without parenthesis like this:
>>>
>>> class Foo
>>> {
>>> method print($x, $y)
>>> {
>>> say "bar: {$x}, {$y}"
>>> }
>>> }
>>>
>>> my $a = Foo.new;
>>>
>>> $a.print: 3, 5; # ...this is what i mean with "colon syntax" ;)
>>>
>>> It is possible to use this syntax to call methods on 'self' as well:
>>>
>>> class Bar is Foo
>>> {
>>> method printDefault
>>> {
>>> self.print: 8, 12
>>> }
>>> }
>>>
>>> my $b = Bar.new;
>>>
>>> $b.printDefault;
>>>
>>> I use $. rather than 'self' in order to work with attributes inside
>>> methods in my classes, well, ... mostly, because it does not seem
>>> possible to do this (in rakudo, at least version 2019.07.1):
>>>
>>> class Baz is Foo
>>> {
>>> method printDefault
>>> {
>>> $.print: 8, 12
>>> }
>>> }
>>>
>>> This yields a "Confused" error, stating that it expects a so-called
>>> 'colon pair'.
>>>
>>> Is this intentional? Because I'm kind of confused as well about this,
>>>
>>> I can live with this 'syntactical quirk', but I just keep wondering
>>> about it because I'd personally expect that this "$.methodname: $args"
>>> variant should "just work" as well...
>>>
>>> ...so "what gives"? ;)
>>>
>>> Thanks for your insights!
>>>
>>> Regards,
>>>
>>> Raymond.
>>>
>> --
>> -y
>>
>
>


Re: Question about "colon syntax" for calling other methods on 'self' inside a method

2019-11-18 Thread Vadim Belman

I would say filing an issue might make sense in this case. Here is a related 
comment from Jonathan: 
https://github.com/rakudo/rakudo/issues/3222#issuecomment-539915286 – and it 
explicitly states that $. is a shortcut for method calling. Therefore, use of 
colon instead of braces should be a valid construct.

Best regards,
Vadim Belman

> On Nov 18, 2019, at 11:40 AM, yary  wrote:
> 
> I take that back! What is the dollar sign doing there in the '$.print: ..." 
> example?
> 
> Try it without the dollar sign. Right now you're calling .print on the 
> anonymous variable '$'
> 
> -y
> 
> 
> On Mon, Nov 18, 2019 at 8:38 AM yary  > wrote:
> looks like a bug to me-file an issue on the rakudo GitHub
> 
> On Sat, Nov 16, 2019 at 5:29 AM Raymond Dresens  > wrote:
> Hello,
> 
> I have a question related to the 'colon syntax' of Raku, which allows
> you to call methods without parenthesis like this:
> 
> class Foo
> {
> method print($x, $y)
> {
> say "bar: {$x}, {$y}"
> }
> }
> 
> my $a = Foo.new;
> 
> $a.print: 3, 5; # ...this is what i mean with "colon syntax" ;)
> 
> It is possible to use this syntax to call methods on 'self' as well:
> 
> class Bar is Foo
> {
> method printDefault
> {
> self.print: 8, 12
> }
> }
> 
> my $b = Bar.new;
> 
> $b.printDefault;
> 
> I use $. rather than 'self' in order to work with attributes inside
> methods in my classes, well, ... mostly, because it does not seem
> possible to do this (in rakudo, at least version 2019.07.1):
> 
> class Baz is Foo
> {
> method printDefault
> {
> $.print: 8, 12
> }
> }
> 
> This yields a "Confused" error, stating that it expects a so-called
> 'colon pair'.
> 
> Is this intentional? Because I'm kind of confused as well about this,
> 
> I can live with this 'syntactical quirk', but I just keep wondering
> about it because I'd personally expect that this "$.methodname: $args"
> variant should "just work" as well...
> 
> ...so "what gives"? ;)
> 
> Thanks for your insights!
> 
> Regards,
> 
> Raymond.
> -- 
> -y



Re: Question about "colon syntax" for calling other methods on 'self' inside a method

2019-11-18 Thread yary
I take that back! What is the dollar sign doing there in the '$.print: ..."
example?

Try it without the dollar sign. Right now you're calling .print on the
anonymous variable '$'

-y


On Mon, Nov 18, 2019 at 8:38 AM yary  wrote:

> looks like a bug to me-file an issue on the rakudo GitHub
>
> On Sat, Nov 16, 2019 at 5:29 AM Raymond Dresens 
> wrote:
>
>> Hello,
>>
>> I have a question related to the 'colon syntax' of Raku, which allows
>> you to call methods without parenthesis like this:
>>
>> class Foo
>> {
>> method print($x, $y)
>> {
>> say "bar: {$x}, {$y}"
>> }
>> }
>>
>> my $a = Foo.new;
>>
>> $a.print: 3, 5; # ...this is what i mean with "colon syntax" ;)
>>
>> It is possible to use this syntax to call methods on 'self' as well:
>>
>> class Bar is Foo
>> {
>> method printDefault
>> {
>> self.print: 8, 12
>> }
>> }
>>
>> my $b = Bar.new;
>>
>> $b.printDefault;
>>
>> I use $. rather than 'self' in order to work with attributes inside
>> methods in my classes, well, ... mostly, because it does not seem
>> possible to do this (in rakudo, at least version 2019.07.1):
>>
>> class Baz is Foo
>> {
>> method printDefault
>> {
>> $.print: 8, 12
>> }
>> }
>>
>> This yields a "Confused" error, stating that it expects a so-called
>> 'colon pair'.
>>
>> Is this intentional? Because I'm kind of confused as well about this,
>>
>> I can live with this 'syntactical quirk', but I just keep wondering
>> about it because I'd personally expect that this "$.methodname: $args"
>> variant should "just work" as well...
>>
>> ...so "what gives"? ;)
>>
>> Thanks for your insights!
>>
>> Regards,
>>
>> Raymond.
>>
> --
> -y
>


Re: Question about "colon syntax" for calling other methods on 'self' inside a method

2019-11-18 Thread yary
looks like a bug to me-file an issue on the rakudo GitHub

On Sat, Nov 16, 2019 at 5:29 AM Raymond Dresens 
wrote:

> Hello,
>
> I have a question related to the 'colon syntax' of Raku, which allows
> you to call methods without parenthesis like this:
>
> class Foo
> {
> method print($x, $y)
> {
> say "bar: {$x}, {$y}"
> }
> }
>
> my $a = Foo.new;
>
> $a.print: 3, 5; # ...this is what i mean with "colon syntax" ;)
>
> It is possible to use this syntax to call methods on 'self' as well:
>
> class Bar is Foo
> {
> method printDefault
> {
> self.print: 8, 12
> }
> }
>
> my $b = Bar.new;
>
> $b.printDefault;
>
> I use $. rather than 'self' in order to work with attributes inside
> methods in my classes, well, ... mostly, because it does not seem
> possible to do this (in rakudo, at least version 2019.07.1):
>
> class Baz is Foo
> {
> method printDefault
> {
> $.print: 8, 12
> }
> }
>
> This yields a "Confused" error, stating that it expects a so-called
> 'colon pair'.
>
> Is this intentional? Because I'm kind of confused as well about this,
>
> I can live with this 'syntactical quirk', but I just keep wondering
> about it because I'd personally expect that this "$.methodname: $args"
> variant should "just work" as well...
>
> ...so "what gives"? ;)
>
> Thanks for your insights!
>
> Regards,
>
> Raymond.
>
-- 
-y


Question about "colon syntax" for calling other methods on 'self' inside a method

2019-11-16 Thread Raymond Dresens
Hello,

I have a question related to the 'colon syntax' of Raku, which allows
you to call methods without parenthesis like this:

class Foo
{
method print($x, $y)
{
say "bar: {$x}, {$y}"
}
}

my $a = Foo.new;

$a.print: 3, 5; # ...this is what i mean with "colon syntax" ;)

It is possible to use this syntax to call methods on 'self' as well:

class Bar is Foo
{
method printDefault
{
self.print: 8, 12
}
}

my $b = Bar.new;

$b.printDefault;

I use $. rather than 'self' in order to work with attributes inside
methods in my classes, well, ... mostly, because it does not seem
possible to do this (in rakudo, at least version 2019.07.1):

class Baz is Foo
{
method printDefault
{
$.print: 8, 12
}
}

This yields a "Confused" error, stating that it expects a so-called
'colon pair'.

Is this intentional? Because I'm kind of confused as well about this,

I can live with this 'syntactical quirk', but I just keep wondering
about it because I'd personally expect that this "$.methodname: $args"
variant should "just work" as well...

...so "what gives"? ;)

Thanks for your insights!

Regards,

Raymond.