[erlang-questions] String versus variable in binary literal

Kostis Sagonas kostis@REDACTED
Wed May 16 12:44:17 CEST 2012


On 05/16/2012 12:29 PM, Joe Armstrong wrote:
> On Wed, May 16, 2012 at 10:56 AM, Richard Carlsson
> <carlsson.richard@REDACTED>  wrote:
>> On 05/16/2012 10:49 AM, Michel Rijnders wrote:
>>>
>>> Hi,
>>>
>>> Confused newbie here. Can someone please explain the following:
>>>
>>> 1>    <<"foo">>.
>>> <<"foo">>
>>> 2>    Foo = "foo".
>>> "foo"
>>> 3>    <<Foo>>.
>>> ** exception error: bad argument
>>>
>>> What's the error in the last case?
>>
>>
>> The bit syntax doesn't (currently) support encoding strings that are not
>> constant literals. This is something that should be fixed, IMO.
>
> It's a bug (or should be a bug) - try this for size:
>
>>   <<1223232321111,3476824682351,18368119>>.
> <<"Wow">>
>
> Isn't that beautiful :-)

Beautiful or not, please let's not mix two completely different issues 
that are here.

There is no string constant in Joe's example.  There is a binary with 
three segments.  And for better or worse, the default binary segment 
when one does not specify the type and size of a segment is a *byte* 
(type=integer, size=8).  This is clearly stated in the language 
reference manual in a very visible green box:

   When constructing binaries, if the size N of an integer segment is
   too small to contain the given integer, the most significant bits of
   the integer will be silently discarded and only the N least
   significant bits will be put into the binary.

See: http://erlang.org/doc/reference_manual/expressions.html#bit_syntax

Kostis



More information about the erlang-questions mailing list