Project1
标题:
关于运算符
[打印本页]
作者:
sf945
时间:
2007-7-2 22:22
标题:
关于运算符
-(单项) +(单项) ! ~ << >> & | ^ <=> === =~ !~
这些运算符有什么用?
[LINE]1,#dddddd[/LINE]
本贴由论坛斑竹絮儿认可答案,如楼主认为问题未解决,请重新将此贴编辑为“有事请教”,并回帖叙述疑点即可~ ^-^
作者:
sf945
时间:
2007-7-2 22:22
标题:
关于运算符
-(单项) +(单项) ! ~ << >> & | ^ <=> === =~ !~
这些运算符有什么用?
[LINE]1,#dddddd[/LINE]
本贴由论坛斑竹絮儿认可答案,如楼主认为问题未解决,请重新将此贴编辑为“有事请教”,并回帖叙述疑点即可~ ^-^
作者:
sf945
时间:
2007-7-2 22:41
上帝啊,指引迷途的我吧!
作者:
幻の飞鱼
时间:
2007-7-2 22:43
怎么有几个- -我也没看过
作者:
精灵使者
时间:
2007-7-2 23:02
运算符表达式
赋值
自运算
多重赋值
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感谢您的热情解答~
作者:
sf945
时间:
2007-7-3 19:04
看不懂啊{/dk}
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1