stevied got another question. let's say I got a method and I want it to be able to accept `5` as an argument or `5.0` as an argument. If I set the parameter to an `Int` it chokes when passed a decimal. When I set the paramter to `Rat` it chokes on an integer value. So how do I best accomplish this? Do I need a `multi` and convert the argument as needed or is there some type that can accept either something th 00:26
got another question. let's say I got a method and I want it to be able to accept `5` as an argument or `5.0` as an argument. If I set the parameter to an `Int` it chokes when passed a decimal value. When I set the paramter to `Rat` it chokes on an integer value. So how do I best accomplish this? Do I need a `multi` and convert the argument as needed or is there some type that can accept either someth 00:27
Nemokosch depends if you want to convert to a certain type or not 00:32
stevied i ultimately want it to be converted to a `Rat` 00:33
Nemokosch If you want Rat either way, you could just use Rat() $parameter
the parens allow for conversions
I think this could be further specialized 00:35
stevied oh, wow, never knew that either.
Nemokosch like what function to use for conversion and stuff
but I rarely wanted anything more complex than this
stevied yup, that worked. thanks!
sabas3dgh Hello 07:08
I need to write a rest wbservice in raku. Is it possible? Please explain! 07:09
08:38 Kaiepi left 09:03 Kaiepi joined
Nemokosch Check out Cro 09:04
10:06 frost left 10:49 lizmat joined
stevied I'm getting an error with this code: paste.debian.net/1243011/ 10:55
`Illegally post-declared type: Kg used at line 23`
lizmat stevied: you're using Kg *before* it is being defined 11:05
you will need to stub the class
e.g. by adding "class Kg { ... }" before class Unit is being defined
after that, you also need to change $to.get_abbr to $to!get_abbr 11:06
although I thing you can just replace that by $!abbr :-) 11:07
stevied i tried that, then I get a different error: "No such method 'get_abbr' for tpe 'Kg'
i tried that, then I get a different error: "No such method 'get_abbr' for type 'Kg'
ah, oops
thanks!
lizmat *think 11:08
stevied if raku does a calculation and comes up with an answer of 0.000005, how can I tell it do display that in scientific noatation with "X" number of significant digits? 12:38
do I need a module to help me do that?
ok sprintf can handle this with "e" format spcificer 12:49
lizmat yup, and there's .fmt (which is essentially sprintf under the hood) 12:55
m: say 42.fmt("%e") 12:56
camelia 4.200000e+01
stevied do you know a good way to do pretty scientific notation. so instead of 5e-06 you'd have 5 x 10-6 (with the -6 in superscript)? 12:57
lizmat no way to do that in core, I don't think 12:59
m: dd "x".uninames
camelia ("LATIN SMALL LETTER X",).Seq
lizmat I guess you could whip up an elaborate .subst to do that transformation 13:00
stevied sounds like a good idea 13:01
ok, so let's say I want to convert the string `06` to a superscript. what's a good way to do that? 13:16
the zero would be dropped
lizmat gist.github.com/lizmat/42d59853c1d...79b7043efc 13:19
stevied ah, trans, good idea 13:20
here's what I came up with, FWIW: 13:28
```
if ($num < 10000) {
my $exp = $num ~~ /\d+$/;
$exp = $exp.subst(/^0/, '');
$exp .= trans( [0..9] => [ "\x[2070]".."\x[2079]" ] );
$num = $num.subst(/e\-\d+/, " x 10\x[207B]$exp");
}
```
thanks, Liz!
13:40 Oshawott joined 13:43 archenoth left 13:44 lizmat left
Anton Antonov Which are packages I can assume are always found in Raku? 15:01
Well, I do not need to know. 🙂 I figured to get what I want without that assumption... 15:20
16:17 Oshawott left 16:36 kueppo joined 16:51 kueppo left 19:36 lizmat joined 19:45 lizmat left
stevied I have these two classes: 20:01
```
class Unit-ug is Unit {
method new(Rat:D() $value = 1.0) {
self.bless(
:UnitType('Mass'),
:abbr('µg'),
:base_value(1/1_000_000),
:$value,
:si,
);
}
}
class Unit-mcg is Unit-ug { }
I want the Unit-mcg to have a different abbreviation than Unit-ug. Everything else is the same. What's the cleanest way to do that? 20:03
best I came up with is this: 20:28
```
class Mass-ug is Mass {
method new(Rat:D() $value = 1.0) {
self.bless(
:abbr('µg'),
:base_value(1/1_000_000),
:$value,
:si,
);
}
}
wamba > class Mass-mcg is Mass-ug { 21:11
> method TWEAK { self.clone( abbr => "mcg" ) }
> };
or
> class Mass-mcg is Mass-ug {
> method TWEAK { $.abbr = "mcg" }
> };
> if `abbr` us mutable
But, why do you define your own `new`? 21:13
or
> class Mass-mcg is Mass-ug {
> method TWEAK { $.abbr = "mcg" }
> };
if `abbr` us mutable
or
> class Mass-mcg is Mass-ug {
> method TWEAK { $.abbr = "mcg" }
> };
if `abbr` is mutable
stevied ah, nice. forgot about TWEAK. 21:17
not sure what you mean. but Mass-ug is subclass of Mass class: 21:19
which looks like this: 21:21
```
class Mass {
has Str $!name;
has Str $.abbr is rw;
21:21 discord-raku-bot left 21:22 discord-raku-bot joined
class Mass-lb is Mass { 21:34
method new(Rat:D() $value = 1.0) {
self.bless(
:abbr('lb'),
:base_value(453.59237),
:$value,
);
}
}
my @lb-syn = < lbs pounds pound >;
for @lb-syn {
EVAL 'class ::("Mass-$_") is Mass-lb {}';
Wondering if there is a way to easily generatate aliases for classes. Tried this:
```
class Mass-lb is Mass {
method new(Rat:D() $value = 1.0) {
self.bless(
:abbr('lb'),
:base_value(453.59237),
:$value,
);
}
}
my @lb-syn = < lbs pounds pound >;
for @lb-syn {
EVAL 'class ::("Mass-$_") is Mass-lb {}';
but it throws an error: 21:36
`Name ::("Mass-$_") is not compile-time known, and can not serve as a package name`