types? casting and bools

Discussion in 'Ruby' started by KONTRA Gergely, Dec 12, 2003.

  1. Hi!

    Recently I ran into the problem:

    Why ruby handle booleans so liberally?
    I mean why can I pass anything to an if, and for constructs requiring
    bool? I guess many programmers do it the wrong way saying "if 0" and
    expecting to be true...

    And on the other hand I must use to_i and others to convert from one
    type to another.

    Gergo
    --
    +-[ Kontra, Gergely<> PhD student Room IB113 ]---------+
    | http://www.mcl.hu/~kgergely "Olyan langesz vagyok, hogy |
    | Mobil:(+36 20) 356 9656 ICQ: 175564914 poroltoval kellene jarnom" |
    +-- Magyar php mirror es magyar php dokumentacio: http://hu.php.net --+
     
    KONTRA Gergely, Dec 12, 2003
    #1
    1. Advertising

  2. On 1213, David A. Black wrote:
    > > Why ruby handle booleans so liberally?
    > > I mean why can I pass anything to an if, and for constructs requiring
    > > bool? I guess many programmers do it the wrong way saying "if 0" and
    > > expecting to be true...

    >
    > It is true:


    I meant false, of course...

    > > And on the other hand I must use to_i and others to convert from one
    > > type to another.

    > You mean you want to have to put "to_bool" everywhere? :)


    Not everywhere, just where needed...
    Where should you put these? (examples)

    Gergo

    --
    +-[ Kontra, Gergely<> PhD student Room IB113 ]---------+
    | http://www.mcl.hu/~kgergely "Olyan langesz vagyok, hogy |
    | Mobil:(+36 20) 356 9656 ICQ: 175564914 poroltoval kellene jarnom" |
    +-- Magyar php mirror es magyar php dokumentacio: http://hu.php.net --+
     
    KONTRA Gergely, Dec 13, 2003
    #2
    1. Advertising

  3. 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).
    Everyone can write his/her own to_bool method INLINE. Shouldn't be a big
    deal, but it can avoid some gotchas...

    So in my philosophy, if 0 should raise a typeerror

    So you are forced to write if 0!=0

    (of course a=0;if a -> a=0; if a!=0 )

    Do you think it's the camel's face?

    Gergo

    --
    +-[ Kontra, Gergely<> PhD student Room IB113 ]---------+
    | http://www.mcl.hu/~kgergely "Olyan langesz vagyok, hogy |
    | Mobil:(+36 20) 356 9656 ICQ: 175564914 poroltoval kellene jarnom" |
    +-- Magyar php mirror es magyar php dokumentacio: http://hu.php.net --+
     
    KONTRA Gergely, Dec 13, 2003
    #3
  4. --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 -
    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--
     
    Wesley J Landaker, Dec 13, 2003
    #4
  5. On 1214, Wesley J Landaker wrote:
    Content-Description: signed data
    > 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).

    > In ruby, it's very simple and straightforward. Only two things are
    > logically false: nil, and false. There isn't any "conversion" going on,
    > it's an intrinsic part of the language. There is no "Boolean" data type
    > that things are being "converted" to; *everything* is true, *except*
    > nil and false.

    This is simple, but I think you must consider the above not to allow
    everything to be boolean.
    The time is NOW to change things (before 2.0)...

    So in Rite will it be the same, or will the simplest class (boolean)
    finally have its own class?

    Gergo

    --
    +-[ Kontra, Gergely<> PhD student Room IB113 ]---------+
    | http://www.mcl.hu/~kgergely "Olyan langesz vagyok, hogy |
    | Mobil:(+36 20) 356 9656 ICQ: 175564914 poroltoval kellene jarnom" |
    +-- Magyar php mirror es magyar php dokumentacio: http://hu.php.net --+
     
    KONTRA Gergely, Dec 13, 2003
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. ccs

    An array of bools

    ccs, Jun 13, 2004, in forum: C++
    Replies:
    5
    Views:
    576
    AngleWyrm
    Jun 13, 2004
  2. Mike
    Replies:
    3
    Views:
    648
  3. Jonathon McKitrick

    Python style of accessing bools?

    Jonathon McKitrick, Apr 15, 2004, in forum: Python
    Replies:
    3
    Views:
    378
    Roy Smith
    Apr 15, 2004
  4. Replies:
    15
    Views:
    871
    James Kanze
    Aug 3, 2008
  5. Angus
    Replies:
    20
    Views:
    728
    Krice
    Jun 26, 2009
Loading...

Share This Page