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
-- 
Peter Pentchev  r...@ringlet.net r...@debian.org p...@storpool.com
PGP key:        http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint 2EE7 A7A5 17FC 124C F115  C354 651E EFB0 2527 DF13

Attachment: signature.asc
Description: PGP signature

Reply via email to