From: matz@... (Yukihiro Matsumoto) Date: 2000-09-12T12:33:06+09:00 Subject: [ruby-talk:4881] Re: FEATURE REQUEST: Fixnum bitfields Hi, In message "[ruby-talk:4872] Re: FEATURE REQUEST: Fixnum bitfields" on 00/09/12, Dave Thomas writes: |> |I just realized that the '[]=' is not implimented for Fixnum and Bignum. |> |Add that to my feature request. :) |> |> I don't think it's possible, since Numbers are immutable. |> There's no way to change a value in a variable by invoking a method. | |Is it a different operation than (say) Fixnum#<< or Fixnum#+ ? |Wouldn't it just return a new Fixnum? Fixnum#+ returns new fixnum. But you probably want foo = 0xff foo[1,1] = 0 make the value of foo to be 0xfe. To archive this, there are two options: (a) change the value of the object referenced from the variable foo, which is impossible for immutable. (b) change the value of the variable foo, which is impossible for current Ruby behavior. Method invocation does not affect the value of the variable, altough it may change the state of the object. Then, possible solutions are: (1) use mutable object, e.g. BitVector like Andy mentioned in [ruby-talk:4858]. (2) define String#| etc. to treat string as bitstring. in addition, String and Integer should be interexchangable. (3) avoid using []=. define new bit operations to Integer. for example: foo = 0xfffffffffffffff foo = foo.vec(36,4,DATA_SEGMENT) (4) or other better ideas I can't think of right now. Personally, I prefer (1). matz.