A 11 de fevereiro de 2020 12:03:19 CET, Simon Proctor <simon.proc...@gmail.com> 
escreveu:
>Ok I 100% don't know after trying this out :
>
>my Buf $a = Buf.new(1,2,3);
>my Blob $b = Blob.new(4,5,6);
>$a ~= $b;
>say $a
>
>And it worked fine so... I dunno.
>
>
>On Tue, 11 Feb 2020 at 11:00, Simon Proctor <simon.proc...@gmail.com> wrote:
>
>> I think the problem is IO::Socket.read() returns a Blob not a Buf.
>>
>> ~ has a Buf, Buf variant :
>> https://docs.raku.org/language/operators#infix_~
>>
>> But not a Blob one. Buf does Blob but not vice versa.
>>
>> I think you need to transform the output from .read into a Buf if you want
>> to use the ~= how you want to.
>>
>> Would this work?
>> my Blob $read = Buf.new;
>> $read ~= Buf.new( $socket.read(1024) );
>>
>>
>> On Tue, 11 Feb 2020 at 10:46, Kevin Pye <kevin....@gmail.com> wrote:
>>
>>>
>>> ~ works fine for concatenating Bufs; For example:
>>>
>>> my $a = Buf.new(1,2,3);
>>> my $b = $a ~ Buf.new(4,5,6)
>>>
>>> will assign correctly to $b.
>>>
>>> I can't work out what the problem is here, despite trying various
>>> combinations. Perhaps socket isn't really returning a Blob?
>>>
>>> Kevin.
>>>
>>> On Tue, 11 Feb 2020 at 21:01, JJ Merelo <jjmer...@gmail.com> wrote:
>>>
>>>> You are using ~, which stringifies. Bufs are not strings: you need to
>>>> decode them to concatenate it to a string. If what you want is to
>>>> concatenate the buffer, probably ,= will work (not sure about this, would
>>>> have to check), or any other operator that works on Positionals.
>>>>
>>>> JJ
>>>>
>>>> El mar., 11 feb. 2020 a las 10:56, David Santiago (<deman...@gmail.com>)
>>>> escribió:
>>>>
>>>>> A 11 de fevereiro de 2020 10:47:34 CET, David Santiago <
>>>>> deman...@gmail.com> escreveu:
>>>>> >A 11 de fevereiro de 2020 09:46:06 CET, David Santiago <
>>>>> deman...@gmail.com> escreveu:
>>>>> >>
>>>>> >>Hi!
>>>>> >>
>>>>> >>Can someone explain me why this doesn't work:
>>>>> >>
>>>>> >>my Blob $read;
>>>>> >>$read ~= $socket.read(1024);
>>>>> >>
>>>>> >>Dies with error:
>>>>> >>
>>>>> >>X::Buf::AsStr: Cannot use a Buf as a string, but you called the
>>>>> Stringy method on it
>>>>> >>
>>>>> >>This also doesn't work:
>>>>> >>
>>>>> >>my Buf $read;
>>>>> >>$read ~= $socket.read(1024);
>>>>> >>
>>>>> >>Dies with the same error as above.
>>>>> >>
>>>>> >>
>>>>> >>But this works?
>>>>> >>
>>>>> >>my Blob $read = Buf.new;
>>>>> >>$read ~= $socket.read(1024);
>>>>> >>
>>>>> >>
>>>>> >>Best regards,
>>>>> >>David Santiago
>>>>> >
>>>>> >
>>>>> >Hi!
>>>>> >
>>>>> >Can someone explain me why this doesn't work:
>>>>> >
>>>>> >my Blob $read;
>>>>> >$read ~= $socket.read(1024);
>>>>> >
>>>>> >Dies with error:
>>>>> >
>>>>> >X::Buf::AsStr: Cannot use a Buf as a string, but you called the
>>>>> Stringy method on it
>>>>> >
>>>>> >This also doesn't work:
>>>>> >
>>>>> >my Buf $read;
>>>>> >$read ~= $socket.read(1024);
>>>>> >
>>>>> >Dies with the same error as above.
>>>>> >
>>>>> >
>>>>> >But this works?
>>>>> >
>>>>> >my Blob $read = Buf.new;
>>>>> >$read ~= $socket.read(1024);
>>>>> >
>>>>> >
>>>>> >Best regards,
>>>>> >David Santiago
>>>>>
>>>>>
>>>>> Hi!
>>>>>
>>>>> Can someone explain me why this doesn't work:
>>>>>
>>>>> my Blob $read;
>>>>> $read ~= $socket.read(1024);
>>>>>
>>>>> Dies with error:
>>>>>
>>>>> X::Buf::AsStr: Cannot use a Buf as a string, but you called the Stringy
>>>>> method on it
>>>>>
>>>>> This also doesn't work:
>>>>>
>>>>> my Buf $read;
>>>>> $read ~= $socket.read(1024);
>>>>>
>>>>> Dies with the same error as above.
>>>>>
>>>>>
>>>>> But this works?
>>>>>
>>>>> my Blob $read = Buf.new;
>>>>> $read ~= $socket.read(1024);
>>>>>
>>>>>
>>>>> Best regards,
>>>>> David Santiago
>>>>>
>>>>> --
>>>>> Sent from my Android device with K-9 Mail. Please excuse my brevity.
>>>>>
>>>>
>>>>
>>>> --
>>>> JJ
>>>>
>>>
>>
>> --
>> Simon Proctor
>> Cognoscite aliquid novum cotidie
>>
>> http://www.khanate.co.uk/
>>
>
>

Hi!

I'm still confused.
The read returns a blob, and ~ can be used with strings and Buf. I get this.

>my Blob $read = Buf.new

Does  this means that Blob will do Buf role as well?

>my Buf $a = Buf.new(1,2,3);
>my Blob $b = Blob.new(4,5,6);
>$a ~= $b;

Since this is allowed, does it means that Blob does Buf role by being 
coerced(?) as well? But then shouldn't this be allowed as well?

>my Blob $read;
>$read ~= $socket.read(1024)

Best regards,
David Santiago


-- 
Sent from my Android device with K-9 Mail. Please excuse my brevity.

Reply via email to