[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

irb: 1 & 1 => 1, not true huh? I thought 1 & 1 => true

Peter Alvin

9/28/2008 9:19:00 PM

In irb I did:

puts 1 & 1
and get 1
shouldn't I get true?

Bottom line is this: What is Ruby idiom to test for bit mask? Is there
a more simple way to write:

if session[:permissions] & Permissions::SomeMask ==
Permissions::SomeMask
# user has permission to wash clothes, etc.
end

TIA,
Pete
--
Posted via http://www.ruby-....

4 Answers

Charles Oliver Nutter

9/28/2008 9:32:00 PM

0

Peter Alvin wrote:
> In irb I did:
>
> puts 1 & 1
> and get 1
> shouldn't I get true?
>
> Bottom line is this: What is Ruby idiom to test for bit mask? Is there
> a more simple way to write:
>
> if session[:permissions] & Permissions::SomeMask ==
> Permissions::SomeMask
> # user has permission to wash clothes, etc.
> end

a && b returns the first false element or the last true element.

a & b where a and b are Fixnums does a bit mask like you're looking for.

- Charlie

William James

9/28/2008 9:38:00 PM

0

On Sep 28, 4:19 pm, Peter Alvin <f...@awebabove.com> wrote:
> In irb I did:
>
> puts 1 & 1
> and get 1
> shouldn't I get true?
>
> Bottom line is this: What is Ruby idiom to test for bit mask?  Is there
> a more simple way to write:
>
> if session[:permissions] & Permissions::SomeMask ==
> Permissions::SomeMask
>   # user has permission to wash clothes, etc.
> end
>
> TIA,

You say thanks when nobody has replied, so
you are thanking nobody. You should wait
till someone has replied before you thank
him. Otherwise, he won't even know that you
have read his post; that is very rude and
inconsiderate.

> Pete

# bitwise
254 & 15
==>14
# boolean
254 && 15
==>15

Only two things are untrue: nil and false.

puts "it's true" if 0
it's true
==>nil
puts "it's true" if 254 & 1
it's true
==>nil
puts "it's true" if 254 & 1 > 0
==>nil

Nobuyoshi Nakada

9/29/2008 3:42:00 AM

0

Hi,

At Mon, 29 Sep 2008 06:19:01 +0900,
Peter Alvin wrote in [ruby-talk:316270]:
> puts 1 & 1
> and get 1
> shouldn't I get true?

No. If it were, bit AND operation would be unavailable.

> if session[:permissions] & Permissions::SomeMask ==
> Permissions::SomeMask

if (session[:permissions] & Permissions::SomeMask).nonzero?

--
Nobu Nakada

Brian Candler

9/29/2008 8:09:00 AM

0

> Bottom line is this: What is Ruby idiom to test for bit mask? Is there
> a more simple way to write:
>
> if session[:permissions] & Permissions::SomeMask ==
> Permissions::SomeMask
> # user has permission to wash clothes, etc.
> end

That's basically right - you can factor this out into your own method if
you do it a lot.

If you want to test for a single bit, there is Fixnum#[]

a = 14
a[0] # 0
a[1] # 1
a[2] # 1
a[3] # 1
a[4] # 0

You'd still have to test for a[2] == 1, since 0 and 1 are both true.

However you could use a different representation for your permissions,
such as a string containing a single letter for each permission granted.
Then:

if session[:permissions].include?("w")
# user has permission to wash clothes
end

or simply

if session[:permissions]["w"]
# user has permission to wash clothes
end
--
Posted via http://www.ruby-....