variable = nil if other_var == 1 variable = 2 elsif other_var == 2 variable = 3 endSimple right? Ruby however allows you to short this a bit (with arguable readability):
variable = if other_var == 1 variable = 2 elsif other_var == 2 variable = 3 endThis works because Ruby always returns something from evaluated blocks, even "if"'s. Now, what if you needed a return out of the function during that if?
variable = nil if other_var == 1 variable = 2 elsif other_var == 2 variable = 3 else return "Let's get out this way, it's quicker!" endOne would think he could do this:
variable = if other_var == 1 variable = 2 elsif other_var == 2 variable = 3 else return "Let's get out this way, it's quicker!" end
2.0.0-p247 :037 > variable = if other_var == 1
2.0.0-p247 :038?> variable = 2
2.0.0-p247 :039?> elsif other_var == 2
2.0.0-p247 :040?> variable = 3
2.0.0-p247 :041?> else
2.0.0-p247 :042 > return "Let's get out this way, it's quicker!"
2.0.0-p247 :043?> end SyntaxError: (irb):43: void value expression
Nope!
When I first saw this error it kinda reminded me of a similar error Perl would return when you forgot to add 1; to the end of your file, so I tried:
2.0.0-p247 :038?> variable = 2
2.0.0-p247 :039?> elsif other_var == 2
2.0.0-p247 :040?> variable = 3
2.0.0-p247 :041?> else
2.0.0-p247 :042 > return "Let's get out this way, it's quicker!"
2.0.0-p247 :043?> end SyntaxError: (irb):43: void value expression
2.0.0-p247 :047 > variable = if other_var == 1
2.0.0-p247 :048?> variable = 2
2.0.0-p247 :049?> elsif other_var == 2
2.0.0-p247 :050?> variable = 3
2.0.0-p247 :051?> else
2.0.0-p247 :052 > return "Let's get out this way, it's quicker!"; 1;
2.0.0-p247 :053 > end
=> 2
2.0.0-p247 :054 >
I think this might be a problem with the compiler.
2.0.0-p247 :048?> variable = 2
2.0.0-p247 :049?> elsif other_var == 2
2.0.0-p247 :050?> variable = 3
2.0.0-p247 :051?> else
2.0.0-p247 :052 > return "Let's get out this way, it's quicker!"; 1;
2.0.0-p247 :053 > end
=> 2
2.0.0-p247 :054 >