Consider a function which returns the element at a given position in a list:
method AT-POS(\position) The only thing you can say about the result type is that it's whatever the type of the element at that position is. So it doesn't bother specifying a type at all, because the prototype can't know ahead of time what lists you might use it on contain. If you need to know, you can smartmatch the type of the returned value afterward or use the .^can MOP method to see if it supports a named method, etc. (The \ in there means it's a raw value, for speed; AT-POS, as suggested by being all uppercase, is used internally for a bunch of things and wants to be as fast as possible, so it's using some internal tricks.) On Thu, Oct 4, 2018 at 1:51 AM ToddAndMargo <toddandma...@zoho.com> wrote: > >> > >>>> On Wed, Oct 3, 2018 at 7:21 PM ToddAndMargo <toddandma...@zoho.com > >>>> <mailto:toddandma...@zoho.com>> wrote: > >>>> > >>>> >> On 04/10/2018 03:07, ToddAndMargo wrote: > >>>> >>> Hi All, > >>>> >>> > >>>> >>> In another thread, Timo wrote me: > >>>> >>> > >>>> >>> The "-->" part of the signature is optional. If > there isn't > >>>> >>> one, it defaults to Mu, which is the type that > everything > >>>> >>> conforms to, i.e. the sub or method that either has > >>>> "--> Mu" > >>>> >>> explicitly, or has it by leaving it out, may return > >>>> >>> absolutely whatever it wants. > >>>> >>> > >>>> >>> After all, the "-->" part is a constraint, and it > gets > >>>> >>> validated at compile time every time a sub or method > >>>> >>> returns. > >>>> >>> > >>>> >>> I got to thinking, some routines do not return anything. > Without > >>>> >>> the "-->" constraint, how am I to determine if something is > >>>> >>> being returned? > >>>> >>> > >>>> >>> Yours in confusion, > >>>> >>> -T > >>>> > >>>> On 10/3/18 6:44 PM, Timo Paulssen wrote: > >>>> > I just spotted a grave mistake in my earlier mail: > >>>> > > >>>> > the --> constraints are validated at *run* time, not > *compile* time; > >>>> > that's a very big difference, and an important one. Of course > "every > >>>> > time a sub or method returns" doesn't make much sense if i > had meant > >>>> > "compile time", but I felt i should really point it out before > >>>> causing > >>>> > too much confusion. > >>>> > > >>>> > >>>> Hi Timo, > >>>> > >>>> Thank you for the help over on the chat line with IN! > >>>> > >>>> My confusion is not that it returns something (Mu). > >>>> > >>>> My confusion is "what" it returns. And not all subs > >>>> return things, like "say" and "print". > >>>> > >>>> I am presuming I am to pick the "what" from context > >>>> from the examples? > >>>> > >>>> -T > >> > >> On 10/3/18 7:53 PM, yary wrote: > >>> > And not all subs return things, like "say" and "print". > >>> > >>> say and print return true if the print succeeded, just like in perl 5. > >>> > >>>> say say "hi"; > >>> > >>> hi > >>> > >>> True > >>> > >>> > >>> Useful if printing to a filehandle, and the file you're writing to is > on > >>> a volume that fills up. Or a network drive that goes away. You do check > >>> for those, right? > >>> > >>> > >>> -y > >> > >> Hi Yary, > >> > >> Ya, my misunderstanding. Trey just taught me that. Home > >> brew ones too. > >> > >> $ p6 'sub x($Str) {say $Str};say x("y");' > >> y > >> True > >> > >> > >> I think where I got mixed up was not realizing that the > >> things subs return can be ignored. And it is not like I > >> don't do that all the time either. I think I just > >> spaced as in Modula2, you get the finger shaken at you. > >> > >> Now All I have to figure out is how tot tell "what" is being > >> returned. Am I suppose to pick that up from context? > >> > >> -T > > > On 10/3/18 10:02 PM, Brad Gilbert wrote: > > If a routine does not declare it's return type, absolutely anything > > can be returned. > > > > One reason may be that its return value isn't really useful. > > > > It could be that the writer didn't think to declare it. (or didn't > want to) > > > > Another possibility is that the potential returned values are of many > > different types. > > > > --- > > > > Note that any returned value that gets ignored will get sunk. > > (That means the `.sink()` method will get called) > > > > class Baz { > > method sink () { say 'the result of foo() was sunk' } > > } > > sub foo () { > > Baz.new > > } > > > > foo(); # the result of foo() was sunk > > > > So I suppose it is similar to Modula2, except it is up to the writer > > of the class if they shake their finger at you. > > On Wed, Oct 3, 2018 at 10:26 PM ToddAndMargo <toddandma...@zoho.com> > > Thank you. The default return is Mu. That I get. > > How do I figure out what data is being returned? Trial and error? > -- brandon s allbery kf8nh allber...@gmail.com