On 2020-06-01 02:21, Peter Pentchev wrote:
On Mon, Jun 01, 2020 at 01:15:23AM -0700, ToddAndMargo via perl6-users wrote:
On 2020-05-31 17:13, Peter Pentchev wrote:
On Mon, Jun 01, 2020 at 03:12:05AM +0300, Peter Pentchev wrote:
On Sun, May 31, 2020 at 04:29:55PM -0700, ToddAndMargo via perl6-users wrote:
On 2020-05-31 04:58, Peter Pentchev wrote:
So my beef is when you feed these guys an undefined
variable, that they needs to tell you it requires
a "defined" variable.  Not a bunch of useless rubbish.
For example (useless rubbish):
And also... I thought I mentioned this before. You want a more clear
error message for*one*  *single*  specific case of a "can't find this
method, did you mean one of these?" error message. I tried to explain
that this error message is one that is displayed in many cases, not only
for "you passed an undefined thing, I want a defined thing"; in my
opinion, it is actually quite helpful in that it actually lists
the candidates in a "did you mean one of these?" style.

You want it to be clear if you pass an undefined value where a defined
value was expected; that would mean that somebody would have to write
the code to make it check whether it is this very specific case and then
that code would have to be maintained for years and years. Tomorrow
you'll say "but can't it give me a more clear message when I pass an
integer and it expected a string?" and the day after tomorrow you'll say
"but can't it give me a more clear message when I pass a string and it
expected a function?".

The error message says "you passed an object of this type, and I can't
find this method for this type; here are a couple of types that have
this method, did you mean one of these?"  It tells you what the types
are, and it doesn't have to have thousands of special cases. It tells
you what the types are.

Hi  Peter,

I like that you in-line and bottom post.  You are a lot
easier to follow.

I think are talking at cross purposes.  Let me give an
example:

Q: is a "cow" a "Plant"?
A: a "cow" in not a hazel nut
A: a "cow" in not a radish
A: a "cow" in not a carrot
A: a "cow" in not a cabbage
...

Are all of the answers a correct?
Yes.. Evey answer is completely correct.

Are any of the answers helpful?
No

Right. So, once again, just as I said, you are only interested in one of
the answers - "Str:U is not a Str:D, you want a Str:D". However, how
should Raku know *which* one of the answers you are interested in?
Tomorrow you may pass an integer to a function that only accepts strings
and floating-point numbers; should Raku tell you "you must pass a
string, not an integer" or "you must pass a floating-point number, not
an integer"? Raku doesn't know which one of those you meant.

...accepts strings *or* floating-point numbers, of course...

G'luck,
Peter



Hi Peter,

I screw up A LOT.  When something REQUIRES "Str:D" and I
send it a "Str:U", I want to be told such.  Not all
the things it can't do, which I see thrashing around the
protuberance of the scrubbary.

      starts-with's invocant requires a defined value (Str:D)

would be perfect.  Not appreciated is a list of all the
things it can't do.  This makes me have to BOTH troubleshoot
my screw up and the everything it can't do error message.

I think what you are trying to do is help me fix my screw
ups, which is of course, much appreciated.  You are trying
to help me understand what the error message means.

What I am after in this thread is a better error message.

Thank you for all the help and tips.

-T

p.s believe me, there will be a lot more screw ups on my
part in the future for you to help me fix!  Of that you
can rest assured.

OK, so for the last time :)

Imagine the following code:

===================================================

#!/usr/bin/env raku

use v6.d;

class Thing {
        multi method do-things(Int:D $value) {
                say "A thing can do things with an integer: $value";
        }

        multi method do-things(Rational:D $value) {
                say "A thing can do things with a rational number: $value";
        }
}

my Thing:D $thing = Thing.new;

dd $thing;

$thing.do-things(5);
$thing.do-things(3/5);

# And now for the clincher...
$thing.do-things("what?!");

===================================================

Running it on my system does this:

[roam@straylight ~/tmp/v/roam/testwhee]$ raku functions.raku
Thing $thing = Thing.new
A thing can do things with an integer: 5
A thing can do things with a rational number: 0.6
Cannot resolve caller do-things(Thing:D: Str:D); none of these signatures match:
     (Thing: Int:D $value, *%_)
     (Thing: Rational:D $value, *%_)
   in block <unit> at functions.raku line 23

[roam@straylight ~/tmp/v/roam/testwhee]$

In other words, Raku tells me "I don't know which of these methods you want".
It doesn't know.

You say "it should tell me exactly what to do" - well, what exactly
would you like Raku to tell you in this case? Should it assume that you
meant to pass an integer? Should it assume that you meant to pass a
rational number?

It cannot tell you anything more specific.
It just... doesn't... know.
You are the only one who knows what you're *trying* to do. Raku doesn't.

Hope that helps :)

G'luck,
Peter


Hi Peter,

We are on the same page.  I still think they could
improve their error message.  If they are checking
the earth, moon, and stars, they can easily add
defined as one of their tests.  It is better to inform
you what actually is wrong rather than listing what
is can not do.


A follow up question:

Is there a booboo in the documentation here?

https://docs.raku.org/routine/starts-with
multi method starts-with(Str:D: Str(Cool) $needle, :i(:$ignorecase), :m(:$ignoremark) --> Bool:D)

It says "multi method" but only shows one method.
Did they leave something out?

Looking at,
   https://docs.raku.org/routine/index
which gives a similar error message as starts-with,
shows four of them.

If I see "multi" I expect to see more than one.

I do realize the documentation leaves a lot to be
desired -- it is written as a refresher for those who
already know what they are doing, not as a teaching
tool -- so I am always suspicious of it.  We have a
long way to go to catch up with elegance of Perl 5's
Perl docs.

I absolutely adore Raku.  I chaff when I have to use
other languages.

Thank you for the help!

-T

One of my least favorite screw ups is when I copy and
paste a one liner into my program and forget to take
off the final single quote from the one liner.  What
an absolute pain in the neck to find!  Now there
is a real Needle and Haystack!

Reply via email to