• ruby编程语言-学习笔记2(第4章 表达式和操作符)


    对属性和数组元素的赋值

    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, 写下这些,只是为了加深自己的印象。

    若出现错误,或者我有理解错误的地方,

    请指正。衷心感谢。

  • 相关阅读:
    SVN cannot be opened because the project file cannot be parsed.xcode有几种可能错
    Cornerstone是mac操作 如何恢复到某一版本
    这个方法可以留着 + 上传图片
    UIImagePickerController从拍照、图库、相册获取图片
    实现多选相册的图片 demo
    (今天的一个错误)加了全局错误断点之后,依然停在main函数了??
    ios使用支付宝进行支付,注意事项& 集成支付宝钱包支付iOS SDK的方法与经验。
    Http Analyzer 数据抓包
    中文目录文件显示问题
    Python urllib和urllib2模块学习(三)
  • 原文地址:https://www.cnblogs.com/scotth/p/3157633.html
Copyright © 2020-2023  润新知