新手问题 Ruby 实现连续赋值的最佳代码是什么

ibachue · 2012年12月10日 · 最后由 ibachue 回复于 2012年12月11日 · 3487 次阅读

在 C 语言中,我们可以采用逗号语法实现连续的赋值语句

a = 1, b = 2, c = 3

但是在 Ruby 中,上述代码将产生语法错误,Ruby 最标准的连续赋值语句应该是

a, b, c = 1, 2, 3

我猜这种语法来自于a, b, c = [1, 2, 3],但是我觉得,如果右值不是数组,而是几个表达式,需要赋值的变量又较多,这种赋值方法远远没有 C 语言的方法来的清晰。 当然还有一种办法是

a = 1; b = 2; c = 3

这种方法在大部分情况下都 OK,但是由于用了分号,这句话相当于几句语句,如果把它放在 if,unless 语句中,就无法使用优美的后置语法,因为

a = 1; b = 2; c = 3 if condition?

中 if 条件满足与否只会控制是否执行最后一个变量的赋值语句。如果想要全部控制到所有语句,就不得不写成三行了,看上去就不够简洁了。 大家还有什么更好的策略没?更加简洁优雅清晰的语法?

a, b, c = 1, 2, 3 if true

这样?

(a = 1; b = 2; c = 3) if cond

分号好难看...

cond and a = 1 and b = 2 and c = 3

#3 楼 @tumayun 还是这个写法好看诶~

#4 楼 @iBachue 这............开玩笑吧

引自 Ruby Programming Language 4 Expressions and Operators - Assignments - Parallel Assignment Different numbers of lvalues and rvalues

x, y, z = 1, 2 # x=1; y=2; z=nil

The splat operator

x, y, z = 1, *[2,3]  # Same as x,y,z = 1,2,3
*x,y = 1, 2, 3# x=[1,2]; y=3
*x,y = 1, 2# x=[1]; y=2
*x,y = 1# x=[]; y=1

With parens

x,y,z = 1,[2,3]# No parens: x=1;y=[2,3];z=nil 
x,(y,z) = 1,[2,3]# Parens: x=1;y=2;z=3

#6 楼 @ericguo Ruby 语法果然高深莫测

8 楼 已删除
需要 登录 后方可回复, 如果你还没有账号请 注册新账号