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


    4.6.9 范围  Flip-Flops:  ..和...

    ..和... 操作符不是基于方法的,无法重定义。(优先级比较低)

    x+1 .. x*x     #可以认为是x+1 至 x*x 的范围

    因为操作符的值是一个Range对象,  下面3种表达方式都是一样的

    1)  x..y

    2)Range.new(x,y)

    3) Range.new(x,y,true)

      表达式 Flip-Flops的值可以是ture/false布尔值

    ..与...的区别:

    当..filp-flops为true时,它返回true,并检验它的右侧表达式以决定是否将其内部状态状态设置回false

    对于...filp-flops,则要等到下次求值的时候,才会测试其右侧表达式。

    例子

    (1..10).each  { |x|   print x if x==3..x>=3}    #先判断x ,返回true/false,然后输出x

    结果:3

    (1..10).each  { |x|   print x if x==3...x>=3}  #先输出x,再判断x, 然后返回true/false

    结果:34

    ruby的filp-flops是继承自perl的,perl来源于Unix的awk 和sed(以下有awk、sed的讲解链接)

    ..类似awk的filp-flops    http://coolshell.cn/articles/9070.html

    ...类似sed的filp-flops   http://coolshell.cn/articles/9104.html

    http://linux.chinaunix.net/techdoc/develop/2007/02/10/950229.shtml

    ...有阴暗面。能不用就不用吧.

    4.6.10 条件操作符?    (三元操作符)

    x==3?Y:z  # OK,  legal

    3==x?y:z  # synax error,    x? 被解释为方法名

    (3==x)?y:z   #括号解决了(x? 被解释为方法名)的问题

    3==x ?y:z   #空格也可以解决  ---(x? 被解释为方法名)的问题

    若遇上多个?,则从最小的开始判断,(从右到左)

     a ? b : c ? d : e    #先得出c,再得出a

    max = x>y ? x>z ? x : z : y>z ? y:z

    4.6.12 define?操作符

    define?是一个一元操作符。它测试 其操作数是否已经被定义过。(通常使用未定义的变量和方法,都会产生异常。)

    define?对于全局变量,方法,super类、、、、什么的返回值看书。   在P113

    define?操作符优先级很低,

    define?a and define?b   # ok,  检查是否定义了a 和b ,

    define?a && define?b   # 变成了 (define? (a && define?b ) )

    所以尽量清晰点。

    4.6.13 语句修饰符

    Tips:rescue 左侧表达式的异常,会影响右侧表达式的执行

    4.6.14 非操作符    P115

    ()

    []

    {}

    .

    ::

    #以下3个是分隔符

    ;      #用于分隔同一行的多个语句

    ,    #逗号, 用于分隔方法参数,数组,hash字面量中的元素

    =>   #用于hash字面量中,分隔hash键和hash值

    :    #一个冒号,  用作 符号字面量的前缀 (ruby 1.9 用于hash)

    *    #展开或拆开数组中的单个元素

    &     #在方法定义中,将&放在最后一个参数的前面,这会将任何传递给该方法的代码快,赋给该参数。

    <     #在类定义中,指定当前类的super

  • 相关阅读:
    php中字符与字节的区别
    sql把两值之和当作条件进行查询
    Intel® Neural Compute Stick 2
    使用OpenCV的VideoCapture 读取.mp4文件时出现以下错误:Unable to stop the stream: Inappropriate ioctl for device
    更换Raspbian Buster源
    OpenCV之cv2函数 2
    OpenCV中cv2的用法
    OpenVINO 对象识别 real_time_object_detection Movidius
    树莓派和计算棒实现图形识别 RaspBerry Pi4 with OpenVino and Movidius
    树莓派无线网卡老是掉线
  • 原文地址:https://www.cnblogs.com/scotth/p/3162506.html
Copyright © 2020-2023  润新知