Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > hyphens in variable names

Reply
Thread Tools

hyphens in variable names

 
 
Paul Hepworth
Guest
Posts: n/a
 
      07-07-2006
Hello,

I am new to Ruby and have an issue with a xmlsimple object resulting
from a 3rd party webservice.

The xml has nodes that have hyphens (-) in the names. When I try to
access various hashes using the object variables I get errors telling
that the variable doesn't exists. I realize that the ruby syntax doesnot
like hyphens in variable names, how do I get around this?

Example XML:

<object>
<tree-lists>
<tree-list>
...
</tree-list>
...
</tree-lists>
</object>

Example Ruby :

for tlist in object.tree-lists
...
end

Error would be:

NoMethodError in TreeController#importproject
undefined method `tree' for #<TreeLib::Record:0x39171e8>


Thanks in advance.
Paul

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Robert Klemme
Guest
Posts: n/a
 
      07-07-2006
2006/7/7, Paul Hepworth <(E-Mail Removed)>:
> Hello,
>
> I am new to Ruby and have an issue with a xmlsimple object resulting
> from a 3rd party webservice.
>
> The xml has nodes that have hyphens (-) in the names. When I try to
> access various hashes using the object variables I get errors telling
> that the variable doesn't exists. I realize that the ruby syntax doesnot
> like hyphens in variable names, how do I get around this?
>
> Example XML:
>
> <object>
> <tree-lists>
> <tree-list>
> ...
> </tree-list>
> ...
> </tree-lists>
> </object>
>
> Example Ruby :
>
> for tlist in object.tree-lists
> ...
> end
>
> Error would be:
>
> NoMethodError in TreeController#importproject
> undefined method `tree' for #<TreeLib::Record:0x39171e8>


Either use method send or use another tool to work with XML or use
another way to access objects (if this lib provides one, maybe
object["tee-list"] or object[:tree-list]).

Kind regards

robert
>
> Thanks in advance.
> Paul
>
> --
> Posted via http://www.ruby-forum.com/.
>
>



--
Have a look: http://www.flickr.com/photos/fussel-foto/

 
Reply With Quote
 
 
 
 
Jacob Fugal
Guest
Posts: n/a
 
      07-07-2006
On 7/7/06, Paul Hepworth <(E-Mail Removed)> wrote:
> I am new to Ruby and have an issue with a xmlsimple object resulting
> from a 3rd party webservice.
>
> The xml has nodes that have hyphens (-) in the names...
>
> Example XML:
>
> <object>
> <tree-lists>
> <tree-list>
> ...
> </tree-list>
> ...
> </tree-lists>
> </object>
>
> Example Ruby :
>
> for tlist in object.tree-lists
> ...
> end


I'm not certain how xmlsimple works, but I assume it's dynamically
generating methods (or using method_missing) to map methods as
pseudo-properties onto the XML elements. If so, this *might* work:

for tlist in object.send(:'tree-lists')
...
end

Ruby doesn't like you having methods with hyphens in the name
*syntactically*, but semantically, there's nothing wrong with it. You
can create methods with hyphenated names using define_method, just not
def. And you can call methods with hyphenated names using send, just
not the standard dot syntax. It is of course discouraged, being highly
ugly, but it is *possible*.

Jacob Fugal

 
Reply With Quote
 
Jacob Fugal
Guest
Posts: n/a
 
      07-07-2006
On 7/7/06, Robert Klemme <(E-Mail Removed)> wrote:
> Either use method send or use another tool to work with XML or use
> another way to access objects (if this lib provides one, maybe
> object["tee-list"] or object[:tree-list]).


I agree with Robert that if the lib provides hash-style access, that's
probably a cleaner way to go. Note, though, that if the hash needs a
symbol rather than a string, it will need to use quotes also, as I did
in my other post:

object[:'tree-list']

Omitting the quotes would give a syntax error:

$ irb
>> hash = {}

=> {}
>> hash[:tree-list]

NameError: undefined local variable or method `list' for main:Object

Jacob Fugal

 
Reply With Quote
 
Paul Hepworth
Guest
Posts: n/a
 
      07-07-2006
Robert Klemme wrote:
> 2006/7/7, Paul Hepworth <(E-Mail Removed)>:
>> Example XML:
>> Example Ruby :
>>
>> for tlist in object.tree-lists
>> ...
>> end
>>
>> Error would be:
>>
>> NoMethodError in TreeController#importproject
>> undefined method `tree' for #<TreeLib::Record:0x39171e8>

>
> Either use method send or use another tool to work with XML


Are you referring to something like:
object.send('tree-list')

I did a quick search, but have not tried it yet.

> or use
> another way to access objects (if this lib provides one, maybe
> object["tee-list"] or object[:tree-list]).


The tree-lists and tree-list are both hashes, but for some reason I
still get exceptions. I will keep playing with it. Surely I am not the
only one that has run into this problem.

Thanks for your help!

>
> Kind regards
>
> robert



--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Paul Hepworth
Guest
Posts: n/a
 
      07-07-2006
Jacob Fugal wrote:
> On 7/7/06, Robert Klemme <(E-Mail Removed)> wrote:
>> Either use method send or use another tool to work with XML or use
>> another way to access objects (if this lib provides one, maybe
>> object["tee-list"] or object[:tree-list]).

>
> I agree with Robert that if the lib provides hash-style access, that's
> probably a cleaner way to go. Note, though, that if the hash needs a
> symbol rather than a string, it will need to use quotes also, as I did
> in my other post:
>
> object[:'tree-list']


Now that makes sense. I never tried it like this. Wow, what an insight.


>
> Omitting the quotes would give a syntax error:
>
> $ irb
> >> hash = {}

> => {}
> >> hash[:tree-list]

> NameError: undefined local variable or method `list' for main:Object


That is the error that I saw all too often.

>
> Jacob Fugal



--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Robert Klemme
Guest
Posts: n/a
 
      07-07-2006
2006/7/7, Paul Hepworth <(E-Mail Removed)>:
> > Omitting the quotes would give a syntax error:
> >
> > $ irb
> > >> hash = {}

> > => {}
> > >> hash[:tree-list]

> > NameError: undefined local variable or method `list' for main:Object

>
> That is the error that I saw all too often.


Yeah, that's caused by Ruby parsing ":foo" "-" "bar". Sorry, I should
have used the proper syntax, Jacob is right of course, you need
:"foo-bar" or :'foo-bar'. So the list of options now looks like this

object.send "foo-bar"
object.send :"foo-bar"
object["foo-bar"]
object[:"foo-bar"]

Plus same methods with double quotes replaced by single quotes.

robert

--
Have a look: http://www.flickr.com/photos/fussel-foto/

 
Reply With Quote
 
Paul Hepworth
Guest
Posts: n/a
 
      07-07-2006
You guys are great. Thanks so much!

--
Posted via http://www.ruby-forum.com/.

 
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
how to transform a list form of hyphens to an html unordered list ibiza ASP .Net 5 02-09-2006 04:10 PM
New coding standards: use underscores, hyphens or mixed case in command (and identifier) names James Harris C Programming 46 07-23-2004 03:25 PM
Re: "Soft" hyphens Augustus HTML 4 06-25-2003 10:58 PM
Re: "Soft" hyphens Jukka K. Korpela HTML 0 06-24-2003 08:05 AM
Re: "Soft" hyphens spaghetti HTML 0 06-24-2003 07:36 AM



Advertisments