Forum: Ruby Some quick questions

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
82e62c756d89bc6fa0a0a2d7f2b1e617?d=identicon&s=25 rosco (Guest)
on 2005-12-09 11:58
(Received via mailing list)
Hi,

I have a couple more questions. Hopefully they're not so dumb this time.

1) I need a hash that maintains insertion order. In Java, I'd use
LinkedHashMap. Does Ruby have one?

2) I like documentation. So far, Rdoc is great, but I wonder about the
following case:

	class SomeClass
	  attr_accessor :someattr

	  # But I need to validate, for example, so ...
	  def someattr=(i)
	    @someattr unless i < 10
	  end
	end

In the above case, Ruby warns about the method being redefined (and the
original being discarded). However, if I change it to attr_reader to
avoid
that (i.e. manually make the reader) then RDoc lists the attribute as
read-only, with the writer shown as a normal method. This is perfectly
reasonable, but I feel there's probably a way around it.

Thanks in advance,
Ross
82e62c756d89bc6fa0a0a2d7f2b1e617?d=identicon&s=25 rosco (Guest)
on 2005-12-09 12:55
(Received via mailing list)
On Fri, 09 Dec 2005 10:50:29 -0000, Ross Bamford
<rosco@roscopeco.remove.co.uk> wrote:

> Hi,
>
> I have a couple more questions. Hopefully they're not so dumb this time.
>

Ahh well... This is why I hate asking questions... :P

Forget this one:

> 1) I need a hash that maintains insertion order. In Java, I'd use
> LinkedHashMap. Does Ruby have one?
>

Got it, in facets. I discounted the sorted hash thread as not what I
want,
but I see that someone there mentions it as unsuitable for their needs
:)
1b62a85b59ccab03b84ee5ec378f75b4?d=identicon&s=25 slitt (Guest)
on 2005-12-09 13:49
(Received via mailing list)
On Friday 09 December 2005 05:57 am, Ross Bamford wrote:
> Hi,
>
> I have a couple more questions. Hopefully they're not so dumb this time.
>
> 1) I need a hash that maintains insertion order. In Java, I'd use
> LinkedHashMap. Does Ruby have one?

I've only done Ruby for 9 days now, but from the reading I've done, no.
It
would be easy enough to insert the key in an array at the same time you
insert the key=>value in a hash. You could even make a class that does
it all
for you.

Perhaps there's a better way, but that's one I'm sure would work.

By the way, why do you need initial insertion order? Do you ever need to
look
up by the key value? If not, why not use an array of hashes, or an array
of 2
element arrays?

SteveT

Steve Litt
http://www.troubleshooters.com
slitt@troubleshooters.com
4299e35bacef054df40583da2d51edea?d=identicon&s=25 James Gray (bbazzarrakk)
on 2005-12-09 14:50
(Received via mailing list)
On Dec 9, 2005, at 4:57 AM, Ross Bamford wrote:

> 	end
>
> In the above case, Ruby warns about the method being redefined (and
> the original being discarded). However, if I change it to
> attr_reader to avoid that (i.e. manually make the reader) then RDoc
> lists the attribute as read-only, with the writer shown as a normal
> method. This is perfectly reasonable, but I feel there's probably a
> way around it.

You could just define both manually.

James Edward Gray II
A5b14d584d7129819e7e4d949065a9a0?d=identicon&s=25 rosco (Guest)
on 2005-12-09 15:15
(Received via mailing list)
Yes, I suppose at least they're together in the doc then :)

I just hoped I might be able to get them shown in the 'attributes'
table, with their access listed and so on ( [RW]  or whatever).

Thanks for the reply :)
Ec2a9a9da5c8a5f14a0fe2361ae4e08a?d=identicon&s=25 mreed (Guest)
on 2005-12-09 16:16
(Received via mailing list)
James Edward Gray II <james@grayproductions.net> writes:

>On Dec 9, 2005, at 4:57 AM, Ross Bamford wrote:

>> 	end
Don't use attr_accessor, then.    attr_accessor doesn't do any magic;
it's
just a shorthand that defines default accessor methods.
This line:

        attr_accessor :foo

has identical results to this code:

        def foo
            @foo
        end

        def foo=(new_foo)
            @foo = new_foo
        end

So if you're going to define your own foo and foo=, just leave out the
attr_accessor line.  If you're only making your own foo=, you can use
attr_reader to get foo():

        attr_reader :foo
        def foo=
        ...
        end

The other way around is less common, but still doable:

        attr_writer :foo
        def foo
        ...
        end
Bc6d88907ce09158581fbb9b469a35a3?d=identicon&s=25 james_b (Guest)
on 2005-12-09 16:37
(Received via mailing list)
Mark J.Reed wrote:
>>>	  attr_accessor :someattr
> This line:
>             @foo = new_foo
>         end
>

Almost.  The rdoc output is different.  Using attr_accessor, rdoc does
not document 'foo' as being a method, but as being an attribute.

Unless you both  use attr_accessor *and* define method bodies.  Then
rdoc does both; foo is documented as both an attribute and a method.

James
--

http://www.ruby-doc.org       - Ruby Help & Documentation
http://www.artima.com/rubycs/ - Ruby Code & Style: Writers wanted
http://www.rubystuff.com      - The Ruby Store for Ruby Stuff
http://www.jamesbritt.com     - Playing with Better Toys
http://www.30secondrule.com   - Building Better Tools
82e62c756d89bc6fa0a0a2d7f2b1e617?d=identicon&s=25 rosco (Guest)
on 2005-12-09 17:26
(Received via mailing list)
On Sat, 10 Dec 2005 00:36:34 +0900, James Britt wrote:
>>
>
> James

Yup, that's what I mean. I found I could do that, but I didn't notice
it had documented them twice (just tried it and of course you're right),
but I did see that Ruby warns me that the previous definition was
discarded. It's not really a problem, but I do like to strive to be
warning-free :P

Cheers,
Ross
This topic is locked and can not be replied to.