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.