Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > attr_accessor, but for a boolean

Reply
Thread Tools

attr_accessor, but for a boolean

 
 
Albert Schlef
Guest
Posts: n/a
 
      04-12-2010
Let's say I have this code:

class Mambo
attr_accesstor :safe
end

Now,

'safe', in my case, is a boolean. Problem is, the getter will be named
'safe', whereas I want it to be 'safe?'.

In other words, how do I make the getter 'safe?' and the setter 'safe'
?
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Daniel N
Guest
Posts: n/a
 
      04-12-2010
[Note: parts of this message were removed to make it a legal post.]

There's no built in way in ruby for it to know that you're going to put a
boolean in there. You'll need to do something like

class Mambo
attr_writer :safe

def safe?
!!@safe
end
end

HTH
Daniel

On 12 April 2010 11:00, Albert Schlef <> wrote:

> Let's say I have this code:
>
> class Mambo
> attr_accesstor :safe
> end
>
> Now,
>
> 'safe', in my case, is a boolean. Problem is, the getter will be named
> 'safe', whereas I want it to be 'safe?'.
>
> In other words, how do I make the getter 'safe?' and the setter 'safe'
> ?
> --
> Posted via http://www.ruby-forum.com/.
>
>


 
Reply With Quote
 
 
 
 
Daniel N
Guest
Posts: n/a
 
      04-12-2010
[Note: parts of this message were removed to make it a legal post.]

On 12 April 2010 11:10, Aaron Patterson <> wrote:

> On Mon, Apr 12, 2010 at 10:00:06AM +0900, Albert Schlef wrote:
> > Let's say I have this code:
> >
> > class Mambo
> > attr_accesstor :safe
> > end
> >
> > Now,
> >
> > 'safe', in my case, is a boolean. Problem is, the getter will be named
> > 'safe', whereas I want it to be 'safe?'.
> >
> > In other words, how do I make the getter 'safe?' and the setter 'safe'
> > ?

>
> In situations like this, I make two "getters" and leave the assignment
> alone. Other ruby programmers expect your "setters" to be in the form
> of "obj.safe = true", not "obj.safe(true)".
>
> Try something like this:
>
> class Mambo
> attr_accesstor :safe
> alias :safe? :safe
> end
>
> Here it is in action:
>
> irb(main):001:0> class Mambo
> irb(main):002:1> attr_accessor :safe
> irb(main):003:1> alias :safe? :safe
> irb(main):004:1> end
> => nil
> irb(main):005:0> m = Mambo.new
> => #<Mambo:0x000001010cab50>
> irb(main):006:0> m.safe = true
> => true
> irb(main):007:0> m.safe?
> => true
> irb(main):008:0>
>
> --
> Aaron Patterson
> http://tenderlovemaking.com/



Unfortunately this doesn't support safe? being boolean always. It could be
something other than true false (may not be a problem)

If you want to use attr_accessor rather than simply aliasing the method I'd
suggest

def safe?
!!safe
end

This way the expectation of a ? method to return a boolean is preserved.

Cheers
Daniel

 
Reply With Quote
 
Albert Schlef
Guest
Posts: n/a
 
      04-12-2010
Aaron Patterson wrote:
> alias :safe? :safe


Daniel wrote:
> def safe?
> !!@safe
> end



Thank you both. I wanted to make sure there's no built-in way to do
this.

(BTW, in Lisp (CLOS) it's possible to specify the getter/setter names.)
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Albert Schlef
Guest
Posts: n/a
 
      04-12-2010
Albert Schlef wrote:
> Thank you both. I wanted to make sure there's no built-in way to do
> this.


Hey, I've just discovered that 'ri' tells me that Module has an
'attr_reader?' method that creates a question-mark attribute.

Problem is, 'ri' displays methods from everything I've installed on my
system, so I can't know if 'attr_reader?' is provided by Ruby itself or
by some wacky gem.
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Josh Cheek
Guest
Posts: n/a
 
      04-12-2010
[Note: parts of this message were removed to make it a legal post.]

On Mon, Apr 12, 2010 at 12:35 AM, Albert Schlef <>wrote:

> Albert Schlef wrote:
> > Thank you both. I wanted to make sure there's no built-in way to do
> > this.

>
> Hey, I've just discovered that 'ri' tells me that Module has an
> 'attr_reader?' method that creates a question-mark attribute.
>
> Problem is, 'ri' displays methods from everything I've installed on my
> system, so I can't know if 'attr_reader?' is provided by Ruby itself or
> by some wacky gem.
> --
> Posted via http://www.ruby-forum.com/.
>
>

Doesn't work for me, so probably from some gem.

You could do something like this:

class Module
def attr_accessor?(*methods)
methods.each do |method|
ivar = "@#{method}"
define_method("#{method}=") { |value| instance_variable_set ivar ,
value }
define_method("#{method}?") { !!instance_variable_get(ivar) }
end
end
end


class Example
attr_accessor? :abc
end

e = Example.new
e.abc = true
e.abc? # => true

e.abc = false
e.abc? # => false

e.abc = 1
e.abc? # => true

e.abc = nil
e.abc? # => false

e.abc = :adsf
e.abc? # => true




There was also a ruby quiz about attr methods
http://rubyquiz.com/quiz67.html And there is a gem based off of it
http://github.com/ahoward/fattr

I don't know where yours came from, though.

 
Reply With Quote
 
Intransition
Guest
Posts: n/a
 
      04-12-2010

On Apr 11, 9:13=A0pm, Daniel N <has....@gmail.com> wrote:

> Unfortunately this doesn't support safe? being boolean always. =A0It coul=

d be
> something other than true false (may not be a problem)
>
> If you want to use attr_accessor rather than simply aliasing the method I=

'd
> suggest
>
> def safe?
> =A0 !!safe
> end
>
> This way the expectation of a ? method to return a boolean is preserved.


I used to think this too, but... I think it was Austin Ziegler who
made the argument against using anything like "!!". In ruby it isn't
necessary. Anything that isn't nil or false is evaluated by
conditionals as true. I haven't once seen a case where it mattered if
a boolean was returned rather than the underlying value.


 
Reply With Quote
 
Intransition
Guest
Posts: n/a
 
      04-12-2010
On Apr 11, 9:00=A0pm, Albert Schlef <albertsch...@gmail.com> wrote:
> Let's say I have this code:
>
> class Mambo
> =A0 attr_accesstor :safe
> end
>
> Now,
>
> 'safe', in my case, is a boolean. Problem is, the getter will be named
> 'safe', whereas I want it to be 'safe?'.


In Ruby 1.9, once can create writers with

attr =3D

I love this feature b/c it means I can just use #attr and not need the
other three attr_reader, attr_writer and attr_accessor.

It would be cool if we could make "boolean" readers too with,

attr ?

(P.S. Is the attr =3D feature going to get back ported to 1.8.8?)

 
Reply With Quote
 
Daniel Berger
Guest
Posts: n/a
 
      04-12-2010


On Apr 11, 7:00=A0pm, Albert Schlef <albertsch...@gmail.com> wrote:
> Let's say I have this code:
>
> class Mambo
> =A0 attr_accesstor :safe
> end
>
> Now,
>
> 'safe', in my case, is a boolean. Problem is, the getter will be named
> 'safe', whereas I want it to be 'safe?'.
>
> In other words, how do I make the getter 'safe?' and the setter 'safe'
> ?


Wouldn't that have been nice?

http://blade.nagaokaut.ac.jp/cgi-bin...ruby-core/5796

Regards,

Dan

 
Reply With Quote
 
Bill Kelly
Guest
Posts: n/a
 
      04-12-2010
Intransition wrote:
>>
>> This way the expectation of a ? method to return a boolean is preserved.

>
> I used to think this too, but... I think it was Austin Ziegler who
> made the argument against using anything like "!!". In ruby it isn't
> necessary. Anything that isn't nil or false is evaluated by
> conditionals as true. I haven't once seen a case where it mattered if
> a boolean was returned rather than the underlying value.


In a DRb situation, I'd rather send 'true' across the wire than
an arbitrary object.

Also, if the boolean value is going to be stored somewhere,
I'd rather store a 'true' than reference an arbitrary object.

Also, if I'm adding a temporary debug printout #{someval.inspect}
it's nicer to see true/false in the output.


Regards,

Bill




 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Subtle difference between boolean value and boolean comparison? Metre Meter Javascript 7 08-06-2010 08:40 PM
Re: "But..but...but...I can see Russia from my porch!" mrLookout@sewage.com Computer Support 0 04-15-2010 12:02 AM
difference between 'boolean' and 'java.lang.Boolean' J Leonard Java 4 01-19-2008 02:56 AM
Boolean question. File here but not there. Peter Bailey Ruby 4 07-26-2007 12:23 PM
boolean to std_logic valentin tihomirov VHDL 3 01-05-2004 04:48 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57