赞 | 27 |
VIP | 400 |
好人卡 | 13 |
积分 | 17 |
经验 | 69730 |
最后登录 | 2025-8-2 |
在线时间 | 3039 小时 |
Lv3.寻梦者 (暗夜天使) 精灵族の天使
- 梦石
- 0
- 星屑
- 1707
- 在线时间
- 3039 小时
- 注册时间
- 2007-3-16
- 帖子
- 33731
 
|
- 运算符表达式
- 赋值
- 自运算
- 多重赋值
- and
- or
- not
- 条件运算符
- 例子:
- 1+2*3/4
- 为了便于编程,有些方法调用和控制结构是以运算符的形式出现的。Ruby 语言中有下列运算符。
- 高 ::
- []
- **
- -(单项) +(单项) ! ~
- * / %
- + -
- << >>
- &
- | ^
- > >= < <=
- <=> == === != =~ !~
- &&
- ||
- .. ...
- ?:(条件运算符)
- =(+=, -= ... )
- not
- 低 and or
- 左侧的“高”和“低”表示运算符的优先度。例如“&&”的优先度要高于“||”,如下所示。
- a && b || c # => (a && b) || c
- a || b && c # => a || (b && c)
- 大部分运算符都是些特殊形式的方法调用,但有些运算符被嵌入在语言之中,无法进行重定义。
- 能够重定义的运算符(方法)
- +@、-@ 表示单项运算符 +、-,在方法定义等场合中可以使用这种表示法。
- | ^ & <=> == === =~ > >= < <= << >>
- + - * / % ** ~ +@ -@ [] []= `
- 不能重定义的运算符(控制结构)
- 由多个运算符组合而成的自运算运算符、“!=”以及“!~”是不能重定义的。
- = ?: .. ... ! not && and || or ::
- 赋值例子:
- foo = bar
- foo[0] = bar
- foo.bar = baz
- 语法:
- 变量 '=' 表达式
- 常量 '=' 表达式
- 表达式 '['表达式..']' '=' 表达式
- 表达式 '.' 标识符 '=' 表达式
- 我们使用赋值表达式向变量等对象进行赋值。赋值也可以用作局部变量和常数的声明。赋值表达式的左边必须是下列之一。
- 变量
- 变量 '=' 表达式
- 若左边是变量的话,就将表达式的计算值代入其中。
- 数组调用
- 表达式1 '[' 表达式2 ... ']' '=' 表达式n
- 先计算表达式 1 得到一个对象,再把从表达式 2 到表达式 n 作为参数,来调用该对象的“[]=”方法。
- class C
- def initialize
- @ary = [0,1,2,3,4,5,6,7]
- end
- def [](i)
- @ary[i * 2]
- end
- def []=( i, v )
- @ary[i * 2] = v
- end
- end
- c = C.new
- p c[3] # 变成 c.[]( 3 ), 结果为6
- p c[3] = 1 # 变成 c.[]=(3,1),结果为1
- 属性调用
- 表达式1 '.' 标识符 '=' 表达式2
- 计算表达式 1 得到一个对象,再以表达式 2 为参数来调用该对象的“标识符=”方法。
- class C
- def foo
- @foo
- end
- def foo=( v )
- @foo = v
- end
- end
- c = C.new
- c.foo = 5 # 变成 c.foo=( 5 )
- p c.foo # => 5
- 还可以使用 attr_accessor 来定义属性。
- class C
- attr_accessor :foo
- end
- c = C.new
- c.foo = 5 # 变成 c.foo=( 5 )
- p c.foo # => 5
- 自运算
- 例子:
- foo += 12 # foo = foo + 12
- foo *= 3 # foo = foo * 3
- 语法:
- 表达式1 op= 表达式2 # 表达式 1 等同于普通赋值表达式左边的部分
- op 就是下列中的某一个。运算符与 = 之间不留间隔。
- +, -, *, /, %, **, &, |, ^, <<, >>, &&, ||
- 这种赋值形式和下面运算
- 表达式1 = 表达式1 op 表达式2
- 等同。
- 多重赋值
- 例子:
- foo, bar, baz = 1, 2, 3
- foo, = list()
- foo, *rest = list2()
- 语法:
- 表达式 [',' [ 表达式 ',' ... ] ['*' [ 表达式 ]]] = 表达式 [, 表达式 ... ]['*' 表达式 ]
- '*' [ 表达式 ] = 表达式 [, 表达式 ... ]['*' 表达式 ]
- 多重赋值是指,在多个表达式以及数组中同时进行的赋值。左边的各个表达式必须是可以被赋值的。若右边只有一个表达式时,则将该表达式的计算值转为数组后,再把数组中的各个单元依次赋值给左边。若右边数组单元的数量超过左边的话,将忽略多余的数组单元。若右边数组单元个数不足的话,将向左边多余的单元中代入 nil。
- 若左边最后一个表达式前带 * 的话,则将右边多余的单元以数组的形式代入这个带 * 的表达式中。若右边没有多余单元的话,就把空数组代入其中。
- foo, bar = [1, 2] # foo = 1; bar = 2
- foo, bar = 1, 2 # foo = 1; bar = 2
- foo, bar = 1 # foo = 1; bar = nil
- foo, bar = 1, 2, 3 # foo = 1; bar = 2
- foo = 1, 2, 3 # foo = [1, 2, 3]
- *foo = 1, 2, 3 # foo = [1, 2, 3]
- foo, *bar = 1, 2, 3 # foo = 1; bar = [2, 3]
- and例子:
- test && set
- test and set
- 语法:
- 表达式 '&&' 表达式
- 表达式 and 表达式
- 首先计算左边,若结果为真就接着计算右边。and 运算符的作用相同但优先度更低。将包含 and 的表达式作为某方法的参数时,必须使用双层括号。
- or例子:
- demo || die
- demo or die
- 语法:
- 表达式 '||' 表达式
- 表达式 or 表达式
- 首先计算左边,若结果为伪就接着计算右边。or 运算符的作用相同但优先度更低。将包含 or 的表达式作为某方法的参数时,必须使用双层括号。
- not例子:
- ! me
- not me
- i != you
- 语法:
- '!' 表达式
- not 表达式
- 若表达式值为真就返回伪,若表达式值为伪则返回真。
- 也可以使用下面的语法。
- 表达式 '!=' 表达式 # 等同于 !(表达式 == 表达式)
- 表达式 '=~' 表达式 # 等同于 !(表达式 =~ 表达式)
- 条件运算符例子:
- obj == 1 ? foo : bar
- 语法:
- 表达式1 ? 表达式2 : 表达式3
- 根据表达式 1 的结果,选择返回表达式 2 或表达式 3。它与
- if 表达式1 then 表达式2 else 表达式3 end
- 完全相同。
复制代码
这是f1里面的搜索结果,关于表达式。
请仔细看看。
p.s.如果还有不懂得话,请按f1看看其他说明。 [LINE]1,#dddddd[/LINE]系统信息:本贴由版主絮儿认可为正确答案,66RPG感谢您的热情解答~ |
|