Concatenating strings with nil values

Hi *,

I like to concatenate a string out of some variables, some of which
are nil. Instead of getting always a “can’t convert nil into String
(TypeError)” message, I would like to have “nil” appended to my
string, as in Java null objects are printed as null in Strings.
Something like this:

words = Hash.new
words[0]=“one”
allWords = “all words:”
allWords << words[0]
allWords << words[1]

–> can’t convert nil into String (TypeError)

Is this possible? Or how can I handle nil objects for this case?

Thanks.

On 2/23/07, tchick [email protected] wrote:

allWords = “all words:”
allWords << words[0]
allWords << words[1]

→ can’t convert nil into String (TypeError)

Is this possible? Or how can I handle nil objects for this case?

Thanks.

Is this what you are looking for?

http://www.rubycentral.com/book/ref_c_hash.html#Hash.new

Harry

On 23 Feb., 15:19, Harry [email protected] wrote:

Is this what you are looking for?

http://www.rubycentral.com/book/ref_c_hash.html#Hash.new

Ahem, no.

What I’m actually trying is this: I have an array of hashes,
and I like to make strings out of them. Some of the hashes
do not have values for some keys, so when putting together
the string, I get the error message, but I just want to add
“nil” or something else for this case.

On Feb 23, 7:55 am, “tchick” [email protected] wrote:

Thanks.

Hi.
There are some ways to do it. The simplest I can suggest is:

allWords << (w[1] || “nil”)

with the disadvantage you’d have to state it everywhere you expect a
nil value.

Another way is

class String
alias old_concat <<
def <<(something)
something = “nil” if something.nil?
old_concat(something)
end
end

in which case is not recommended to mess up with core classes.

On Feb 23, 9:00 am, “tchick” [email protected] wrote:

allWords = “all words:”
allWords << words[0]
allWords << words[1]

→ can’t convert nil into String (TypeError)

Is this possible? Or how can I handle nil objects for this case?

If you’re adventerous (ie. your code is essentially standalone and in
no danger of effecting others):

class NilClass
def to_str
“”
end
end

T.

Puh, why do I always forget that /this/ is possible in Ruby.
It’s hard to get rid of those “safety handcuffs” …

Thanks!

tchick schrieb:

On 23 Feb., 15:19, Harry [email protected] wrote:

Is this what you are looking for?

http://www.rubycentral.com/book/ref_c_hash.html#Hash.new

Ahem, no.

Are you sure? See below…

What I’m actually trying is this: I have an array of hashes,
and I like to make strings out of them. Some of the hashes
do not have values for some keys, so when putting together
the string, I get the error message, but I just want to add
“nil” or something else for this case.

words = Hash.new “nil” # I suppose this is what Harry thought of
words[0]=“one”

allWords = “all words:”
allWords << words[0]
allWords << words[1]

p allWords # => “all words:onenil”

Regards,
Pit

words = Hash.new “nil” # I suppose this is what Harry thought of

Oh yes, that’s good! You’re right, I didn’t get it the first time!

Thanks.