If a method does not explicitly specify its invocant type, it is set to the type of the enclosing class.
The `cos` method is declared in the `Cool` class, so that is its invocant type. The doc shows that it's declared in the `Cool` class. So, the doc is fine as is for the invocant. The returned value is a cosine, which, per the linked doc, is a real number. The doc could perhaps show a return value of Real:D. On Mon, Dec 21, 2020 at 12:05 AM ToddAndMargo via perl6-users <perl6-us...@perl.org> wrote: > > On 12/20/20 1:18 PM, Bruce Gray wrote: > > > > > >> On Dec 20, 2020, at 2:54 AM, ToddAndMargo via perl6-users > >> <perl6-us...@perl.org> wrote: > > > > —snip-- > > > >> I obviously can't feed it a string. > > > > Obviously you cannot, but actually you can! > > > > $ raku -e 'say .cos for 42, "42", ("4" ~ "2"), "5421".substr(1,2);' > > -0.3999853149883513 > > -0.3999853149883513 > > -0.3999853149883513 > > -0.3999853149883513 > > > > The subroutine form in https://docs.raku.org/routine/cos is declared as: > > sub cos(Numeric(Cool)) > > and the text specifies: > > Coerces the invocant (or in sub form, the argument) to Numeric, > > interprets it as radians, returns its cosine. > > , so the string “42” is coerced to the number 42 as it is passed to cos(). > > This kind of coercion is not often needed in user code, but the code of the > > Raku core needs to coerce to maintain a key element of Perl&Raku design: > > * If the coder treats something as a number, then the language acts > > on it as if it is a number, even if it has to convert a string to a number > > behind the scenes at runtime. > > * If the coder treats something as a string, then the language acts > > on it as if it is a string, even if it has to convert a number to a string > > behind the scenes at runtime. > > (BTW, both Perl and Raku use an amazingly efficient auto-caching of this > > string-vs-number duality; many newcomers think the conversion must be a > > performance hog, but it is not.) > > > > For details on the syntax of automatic coercion during a subroutine call, > > see: > > https://docs.raku.org/type/Signature#Coercion_type > > (Most users never need in their own code, but you saw it by reading the > > Raku core, so please take that as just for your curiosity and not as a new > > technique looking for a place in your own designs.) > > > >> On Dec 20, 2020, at 2:17 AM, ToddAndMargo via perl6-users > >> <perl6-us...@perl.org> wrote: > >> https://docs.raku.org/routine/cos > >> method cos() > >> Where is the definition of what is fed to the method? > > —snip— > > The definition is hiding right in front of us :^) > > Just like (in another thread) you defined `method BadAdd () {…}`, the `cos` > > method has open+close parens to show that it has empty Signature. It takes > > no arguments, and will complain if you try to pass an argument to it. > > All methods automatically have access to the invoking object, via “self” > > (and other shortcuts like $.attribute_name). > > When you call `42.cos`, `42` is the invoking object, and that one value is > > all that .cos needs. > > > > > >> On Dec 20, 2020, at 2:25 AM, ToddAndMargo via perl6-users > >> <perl6-us...@perl.org> wrote: > > > > —snip-- > > > >> https://github.com/rakudo/rakudo/blob/master/src/core.c/Cool.pm6 > >> > >> 13: method cos() { self.Numeric.cos } > >> > >> Whatever the heck "self” is > > > > “self” is the “current” object instance (called the “invocant”). > > https://docs.raku.org/language/terms#term_self > > When you define a method in a Class, you are writing sort of abstractly, > > because at any given time you might have many objects (called “instances”) > > of that Class, all alive and working in your program at the same time. > > In most languages that support OO, there is a magic keyword like “this” or > > “self” that refers to *only* that single instance that called the method. > > In Raku, “self” is that keyword, but you can override it to a variable name > > of your choice , if that makes more sense in your code. > > my Str $a = ’15'; > > my Str $b = '37'; > > say $b.cos; > > Inside method `cos`, during the .cos call in the code above, “self” is an > > alias to $b . > > > > > > — > > Hope this helps, > > Bruce Gray (Util of PerlMonks) > > > > > Going back to the original question, > > should not the doc page say? > > method cos( Cool:D: --> Cool:D )