在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
对属性和数组元素的赋值
o.m + = 1 ===》o.m = (o.m()+ 1) # 对 o.m()这个方法的结果+1
对数组元素的赋值也是通过 方法调用来完成。 0.[] = 1 ===>o.[] = o.[] +1 #对o实例对象的[]方法,的结果+1
如果一个对象o定义了一个接受2个参数的、名为[]=的方法 o.[x] = y ===》 那么 o.[] = (x, y)
如果一个对象具有一个接受三个参数的、名为[]=的方法,那么方括号中的值,会被当作索引 o.[x,y] = z ===>那么 o.[] = (x, y, z)
------------分割线--------------------- 缩写形式的赋值 #这个和c、c++ 类似,就不多说了 x+ = 1 ===》 x = x + 1 o.m + =1 ===> o.m = (o.m() +1) o[x] -= 2 ===> o.[] = (x, o.[](x) - 2) # o.[]方法的第一个参数为x,第二个参数为o.[](x) - 2
--------- 有个比较特殊 result ||= [] 分一下几种情况: 1.若result 为false或nil,则result会被赋值为一个新的空数组 2.若result 不为false或nil,则没有任何操作发生, result最终还是=result
note:result = result || [] ,这个展开式,无论result值如何,都会发生赋值操作。
--------分割线---------- 并行赋值 1)左值和右值 数量相等 x, y, z = 1, 2, 3 # x= 1; y=2; z =3 x,y = y,x #swap the value of two variable x=y; y=x #both varibales have both value, 解释下,就是说有2个变量x和y,值相同。
2)一个左值,多个右值 当只有一个左值,但是有多个右值的时候,ruby会创建一个数组来容纳右值,并将这个数组赋给左值 x= 1,2,3 ===》 x = [1,2,3] 可以在左值前加一个*,这不会改变这个赋值操作的意义,也不会改变返回值。 x = 1,2,3 ===> *x = [1,2,3]
但是,如果你不想右值组合成一个数组,只想取第一个值可以这样 x, = 1,2,3 ===> x = 1
3)多个左值,一个数组右值 x, y, z = [1, 2, 3] #same as ===> x, y, z = 1, 2, 3 x = [1, 2] # x become [1, 2], this is not parallel assignment x, = [1, 2] # x become 1 4)左值和右值 数量不同时 x, y, z = 1, 2 # x = 1, y = 2, z = nil x, y = 1, 2, 3 # x = 1, y = 2, 3 is not assigned anywhere
4.5.5.5 展开操作符 如果右值以*开头,则意味着它是一个数组(或类似数组的对象)它的每个元素都是右值。 x, y, z = 1, *[2,3] # x, y ,z = 1, 2, 3 x, y, z, m, n = 1, *[2,3], 4, *[5] # x, y ,z, m, n= 1, 2, 3, 4, 5
*只能一个,当出现** 编译器报错,Syntax Error
note: ruby 1.8 中,数组,范围,hash右值可以展开, ruby 1.9 中,数组,范围,枚举右值可以展开, 可以自己定义一个可展开的类型, ruby 1.8 定义to_ary()方法实现, ruby 1.9中to_ary改名为to_splat
-----分割线------- 当左值放*时,多的右值会放入一个数组中,并赋给该左值。 x, *y = 1, 2, 3 ===> x = 1, y = [2, 3] x, *y = 1, 2 ===> x = 1, y = [2] x, *y = 1 ===> x = 1, y = nil
ruby 1.8 左值*只能出现一个,且在左值最后一个上, ruby 1.9 左值* 也只能出现一个,但是可以出现在左值的任何位置。
#ruby 1.9 only *x, y = 1, 2, 3 ===> x = [1,2], y = 3 *x, y = 1, 2 ===> x = [1], y = 2 *x, y = 1 ===> x = [], y = 1
并行赋值中的圆括号 x, (y, z) = a, b ===>相等与 x= a 和 y, z = b
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
a, b, c, d = [1, [2, [3, 4]]] #no parens, a = 1; b = [2, [3, 4]] ; c = d = nil a, (b , (c, d)) = [1, [2, [3, 4]]] #parens, a= 1; b = 2; c = 3; d = 4
刚开始学ruby, 写下这些,只是为了加深自己的印象。 若出现错误,或者我有理解错误的地方, 请指正。衷心感谢。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论