From: Wesley J Landaker Date: 2003-12-14T00:54:26+09:00 Subject: Re: types? casting and bools --Boundary-02=_mYz2/ItsBsWPhUS Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Description: signed data Content-Disposition: inline On Saturday 13 December 2003 8:37 am, KONTRA Gergely wrote: > On 1213, Austin Ziegler wrote: > > On Sat, 13 Dec 2003 01:56:18 +0900, KONTRA Gergely wrote: > > > Why ruby handle booleans so liberally? > > > > It doesn't. Ruby treats all values excepting false and nil as true. > > It sounds like you're wanting 0 to be treated as false. > > No, I'm just asking how ruby "dare" to convert my 0 to true (or > false, it is the same). Outside of any programming language, an abstract boolean has only two=20 values: true, and false.=20 Many programming languages map true to non-zero and false to zero, but=20 that isn't necessary a given. Return values for commands in a shell are=20 the opposite, 0 is true, anything non-zero is false. Even in languages=20 like C, technically 0 means true and non-zero means false, but it's=20 semantically exactly the opposite for 99.9% of all standard functions,=20 which return 0 for true, and non-zero for false. Some languages, like Python or Perl, have a big list of what is false,=20 and everything else is true. Sometimes it's hard to know what is going=20 to be true or false in those languages unless you are very familiar=20 with the nuances. In digital logic design, often 0 means false, and 1 means true. Except=20 if you're talking about shared bus architectures, then almost always 0=20 means true, 0 means false. While it works for certain domains, it's probably not a good idea in=20 general to assume that integers map have any intrinsic mapping to=20 booleans: it's always a characteristic of the language or problem=20 domain in question. In ruby, it's very simple and straightforward. Only two things are=20 logically false: nil, and false. There isn't any "conversion" going on,=20 it's an intrinsic part of the language. There is no "Boolean" data type=20 that things are being "converted" to; *everything* is true, *except*=20 nil and false.=20 =2D-=20 Wesley J. Landaker - wjl@icecavern.net OpenPGP FP: 4135 2A3B 4726 ACC5 9094 0097 F0A9 8A4C 4CD6 E3D2 --Boundary-02=_mYz2/ItsBsWPhUS Content-Type: application/pgp-signature Content-Description: signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.3 (GNU/Linux) iD8DBQA/2zYm8KmKTEzW49IRAtBYAJwMvW0or5Rx55WRq+U7BmSNPHRkTwCfWtM2 EB+5QK32/TT9jP/t3v2lab4= =zJ1E -----END PGP SIGNATURE----- --Boundary-02=_mYz2/ItsBsWPhUS--