# Conditional value in hash array?

**URL:** <https://www.ruby-forum.com/t/conditional-value-in-hash-array/82760>\
**Category:** Ruby\
**Created:** [January 20, 2007, 3:05pm UTC](https://www.ruby-forum.com/t/conditional-value-in-hash-array/82760 "2007-01-20T15:05:37Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [January 20, 2007, 3:05pm UTC](https://www.ruby-forum.com/t/conditional-value-in-hash-array/82760/1 "2007-01-20T15:05:37Z")

</div>

hos to have a conditional value ? : :category =\> domain unless  
domain.nil?

wrote :

[ :distance =\> radius.to\_f , :category =\> domain unless domain.nil?,  
:valid\_until =\> Time.now.utc]

but giving an error… unexpected kUNLESS\_MOD, expecting ‘]’

---

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [January 20, 2007, 4:05pm UTC](https://www.ruby-forum.com/t/conditional-value-in-hash-array/82760/2 "2007-01-20T16:05:41Z")

</div>

Josselin schrieb:

> hos to have a conditional value ? : :category =\> domain unless  
> domain.nil?

It doesn’t make sense in this situation, because “domain unless  
domain.nil?”  
evauates to “nil” if “domain” contains “nil”.

If you want to insert “nil” if “domain” is not yet defined use something  
like this:

irb(main):002:0\> x = (domain ||= nil)  
=\> nil  
irb(main):003:0\> a = {:a =\> (domain ||= nil)}  
=\> {:a=\>nil}

> [ :distance =\> radius.to\_f , :category =\> domain unless domain.nil?,  
> :valid\_until =\> Time.now.utc]
> 
> but giving an error… unexpected kUNLESS\_MOD, expecting ‘]’

In other situations you should use parenthesis “:category =\> (domain  
unless  
domain.nil?)”.

It is also possible to use the “?:” operator in some cases:

irb(main):007:0\> a = [:a =\> (domain.nil??42:84)]  
=\> [{:a=\>42}]

Wolfgang Nádasi-Donner

---

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [January 20, 2007, 6:00pm UTC](https://www.ruby-forum.com/t/conditional-value-in-hash-array/82760/3 "2007-01-20T18:00:51Z")

</div>

On 20.01.2007 16:38, Josselin wrote:

> my objective is not entering a value in the array if the domain is nil  
> so it seems I should enter first nil if domain is nil as you stated  
> then compact the array to get rid of nil values…

What exactly are you trying to achieve? Is it maybe rather something  
like this:

hash = {  
:distance =\> radius.to\_f,  
:valid\_until =\> Time.now.utc  
}  
hash[:category]= domain unless domain.nil?

Regards

robert

---

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [January 20, 2007, 4:40pm UTC](https://www.ruby-forum.com/t/conditional-value-in-hash-array/82760/4 "2007-01-20T16:40:44Z")

</div>

On 2007-01-20 16:06:42 +0100, Wolfgang Nádasi-Donner  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) said:

> =\> nil
> 
> It is also possible to use the “?:” operator in some cases:
> 
> irb(main):007:0\> a = [:a =\> (domain.nil??42:84)]  
> =\> [{:a=\>42}]
> 
> Wolfgang Nádasi-Donner

thanks Wolfgang

my objective is not entering a value in the array if the domain is nil  
so it seems I should enter first nil if domain is nil as you stated  
then compact the array to get rid of nil values…

---

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [January 20, 2007, 10:42pm UTC](https://www.ruby-forum.com/t/conditional-value-in-hash-array/82760/5 "2007-01-20T22:42:34Z")

</div>

This should work:

[ :distance =\> radius.to\_f , :category =\> (domain unless domain.nil?),  
:valid\_until =\> Time.now.utc]

Gennady.

---

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [January 20, 2007, 7:01pm UTC](https://www.ruby-forum.com/t/conditional-value-in-hash-array/82760/6 "2007-01-20T19:01:01Z")

</div>

On 2007-01-20 17:57:01 +0100, Robert K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
said:

> :valid\_until =\> Time.now.utc  
> }  
> hash[:category]= domain unless domain.nil?
> 
> Regards
> 
> robert

thanks that’s better… forgot the key nme …
