Rubyの演算子
Rubyは演算子の豊富なセットをサポートしています。 ほとんどの演算子は、実際にはメソッド呼び出しです。 例えば、+ bは。+(B)として解釈され、前記可変+ポインティング方法は、メソッド呼び出しのパラメータであるB、呼び出されます。
各オペレータのための(+ - * /%**&| ^ << >> && ||)( - =、等+ =)、対応する略語の代入演算子を持っています。
Rubyの算術演算子
その後、20の変数bの値が、変数10の値を仮定します。
运算符 | 描述 | 实例 |
---|---|---|
+ | 加法 - 把运算符两边的操作数相加 | a + b 将得到 30 |
- | 减法 - 把左操作数减去右操作数 | a - b 将得到 -10 |
* | 乘法 - 把运算符两边的操作数相乘 | a * b 将得到 200 |
/ | 除法 - 把左操作数除以右操作数 | b / a 将得到 2 |
% | 求模 - 把左操作数除以右操作数,返回余数 | b % a 将得到 0 |
** | 指数 - 执行指数计算 | a**b 将得到 10 的 20 次方 |
Rubyの比較
その後、20の変数bの値が、変数10の値を仮定します。
运算符 | 描述 | 实例 |
---|---|---|
== | 检查两个操作数的值是否相等,如果相等则条件为真。 | (a == b) 不为真。 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真。 | (a != b) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 | (a > b) 不为真。 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 | (a < b) 为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 | (a >= b) 不为真。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 | (a <= b) 为真。 |
<=> | 联合比较运算符。如果第一个操作数等于第二个操作数则返回 0,如果第一个操作数大于第二个操作数则返回 1,如果第一个操作数小于第二个操作数则返回 -1。 | (a <=> b) 返回 -1。 |
=== | 用于测试case语句的 when 子句内的相等。 | (1...10) === 5 返回 true。 |
.eql? | 如果接收器和参数具有相同的类型和相等的值,则返回 true。 | 1 == 1.0 返回 true,但是 1.eql?(1.0) 返回 false。 |
equal? | 如果接收器和参数具有相同的对象 id,则返回 true。 | 如果 aObj 是 bObj 的副本,那么 aObj == bObj 返回 true,a.equal?bObj 返回 false,但是 a.equal?aObj 返回 true。 |
Rubyの代入演算子
その後、20の変数bの値が、変数10の値を仮定します。
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符,把右操作数的值赋给左操作数 | c = a + b 将把 a + b 的值赋给 c |
+= | 加且赋值运算符,把右操作数加上左操作数的结果赋值给左操作数 | c += a 相当于 c = c + a |
-= | 减且赋值运算符,把左操作数减去右操作数的结果赋值给左操作数 | c -= a 相当于 c = c - a |
*= | 乘且赋值运算符,把右操作数乘以左操作数的结果赋值给左操作数 | c *= a 相当于 c = c * a |
/= | 除且赋值运算符,把左操作数除以右操作数的结果赋值给左操作数 | c /= a 相当于 c = c / a |
%= | 求模且赋值运算符,求两个操作数的模赋值给左操作数 | c %= a 相当于 c = c % a |
**= | 指数且赋值运算符,执行指数计算,并赋值给左操作数 | c **= a 相当于 c = c ** a |
Rubyの並列割り当て
Rubyはまた、並列代入変数をサポートしています。 これは、複数の変数がRubyコードの行で初期化することができることができます。 例えば:
= 10 B = 20 C = 30
速く免責事項パラレル割り当てを使用します:
A、B、C = 10、20、30
パラレル割り当て二つの変数の値を交換するときにも便利です。
、B = B、C
Rubyのビット演算子
ビット演算子はビットに作用し、ビット演算によってビット。
= 60と仮定した場合、およびB = 13、今、次の通りであるバイナリ形式、中:
= 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
| B = 0011 1101
^ B = 0011 0001
〜A = 1100 0011
次の表は、Rubyはビット演算子をサポートして一覧表示されます。
演算子 | 説明 | 例 |
---|---|---|
& | 両方が二つのオペランドに存在する場合、バイナリAND演算子は、結果をコピーします。 | 12になります(A&B)、すなわち、0000 1100であります |
| | いずれかのオペランドに存在する場合は、バイナリOR演算子は、結果をコピーします。 | (Aは| b)は61になり、00111101です |
^ | オペランドの一つに存在ではなく、同時に2つのオペランド、バイナリXOR演算子に結果にコピーを存在する場合。 | (A ^ b)が49になり、00110001です |
〜 | 2の補数演算子は単項演算子、「フリップ」位置効果です。 | (〜A)-61、1100 0011,2は記号でバイナリ数の形を補完するものとなります。 |
<< | バイナリの左シフト演算子。 左と右のオペランドに指定した桁数を移動する左オペランドの値。 | << 2はそれが1111万である、240になります |
>> | バイナリの右シフト演算子。 左オペランドの値が右に右オペランドに指定したビット数を移動します。 | A >> 2は15になり、それは、0000 1111です |
Rubyの論理演算子
次の表は、Rubyは論理演算子をサポートして一覧表示されます。
その後、20の変数bの値が、変数10の値を仮定します。
运算符 | 描述 | 实例 |
---|---|---|
and | 称为逻辑与运算符。如果两个操作数都为真,则条件为真。 | (a and b) 为真。 |
or | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 | (a or b) 为真。 |
&& | 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 | (a && b) 为真。 |
|| | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 | (a || b) 为真。 |
! | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 | !(a && b) 为假。 |
not | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 | not(a && b) 为假。 |
Rubyの三項演算子
三項演算子と呼ばれる複数のアクションがあります。 式の最初の計算真理値、およびその結果に基づいて、文の中で2背後に実施することを決定しました。 条件演算子の構文は次のとおりです。
运算符 | 描述 | 实例 |
---|---|---|
? : | 条件表达式 | 如果条件为真 ? 则值为 X : 否则值为 Y |
Rubyの範囲演算子
Rubyでは、シーケンスは、連続した範囲値のシリーズを作成するために使用されている - それらの間の値、終了値(状況による)と値を開始含まれています。
Rubyでは、これらの配列は、作成する ".."と "..."範囲演算子を使用することです。 範囲は、次の2つの形式は、唯一の開始値、終了値が含まれていない含まれているフォームを作成するための3つの範囲を開始値と終了値を作成されています。
运算符 | 描述 | 实例 |
---|---|---|
.. | 创建一个从开始点到结束点的范围(包含结束点) | 1..10 创建从 1 到 10 的范围 |
... | 创建一个从开始点到结束点的范围(不包含结束点) | 1...10 创建从 1 到 9 的范围 |
Rubyの定義された?演算子
定義された?メソッド呼び出しの形で式が定義されている判断を渡すかどうか、特別な演算子です。 式が未定義の戻りはnilである場合は、説明の文字列表現を返します。
以下は、使用を定義されたさまざまな演算子です?:
使用方法1
定義された?変数#変数がTrue初期化されている場合、
例えば:
FOO = 42 定義された?FOO#=> "ローカル変数" 定義された?$ _#=> "グローバル変数" 定義された?バー#=> nilの(未定義)
シンタックス2
この方法は、真の定義されている場合は?METHOD_CALL#定義されています
例えば:
定義されている?#=> "メソッド"を置きます 定義された?プット(バー)#=> nilの(ここでは未定義バー) 定義された?アンパック#=> nilの(ここでは未定義)
シンタックス3
#メソッドは、スーパーユーザーとして呼び出すことができる場合は、その後、真の存在します 定義された?スーパー
例えば:
定義された?スーパー#=> "スーパー"(と呼ぶことができる場合) 定義された?スーパー#=> nilの(呼び出されていない場合)
シンタックス4
定義された?コードブロックがTrue渡された場合は#を得、
例えば:
(転送ブロックの場合)定義された?収量#=> "降伏" 定義された?(ブロックを通過しない場合)#=> nilをもたらします
Rubyのドット演算子 "。"そして、二重コロン演算子「::」
あなたは、モジュール名を追加し、メソッド名の前にモジュールのメソッドを呼び出すために下線ことができます。 あなたは、定数を参照するためにモジュール名と二つのコロンを使用することができます。
::外部からクラスやモジュールのどこにでもアクセスできるクラスやモジュール内で定義された定数、インスタンスメソッドとクラスメソッドを可能にする、単項演算子です。
覚えておいてください:Rubyでは、クラスやメソッドも定数として使用することができます。
あなただけの適切なクラスまたはモジュールオブジェクトに戻るには、定数式::接頭語の名前の前に追加する必要があります。
接頭式を使用しない場合、デフォルトのマスターオブジェクトクラス。
ここでは2つの例を示します。
メインの定数モジュールFooの中で定義されたMR_COUNT = 0#オブジェクトクラス MR_COUNT = 0 グローバルカウント1を設定する:: MR_COUNT = 1# MR_COUNT = 2#は2のローカル数を設定しました 終了 これは、グローバル定数は、 "foo"というローカル定数は何のFoo :: MR_COUNT番号を置くされMR_COUNT番号を置きます
番目のインスタンス:
CONST = 'そこ' クラスInside_one CONST = procの{ 'そこに'} デフwhere_is_my_CONST :: CONST + '1内側」 終了 終了 クラスInside_two CONST = '2内側」 デフwhere_is_my_CONST CONST 終了 終了 Inside_one.new.where_is_my_CONSTは置きます Inside_two.new.where_is_my_CONSTは置きます オブジェクト:: CONST + Inside_twoは置く:: CONSTを Inside_two :: CONST + CONSTを置きます Inside_one :: CONSTを置きます Inside_one :: CONST.call + Inside_twoは置く:: CONSTを
Rubyの演算子の優先順位
優先順位の演算子に基づいて、次の表に、すべての演算子を示します。
方法 | 运算符 | 描述 |
---|---|---|
是 | :: | 常量解析运算符 |
是 | [ ] [ ]= | 元素引用、元素集合 |
是 | ** | 指数 |
是 | ! ~ + - | 非、补、一元加、一元减(最后两个的方法名为 +@ 和 -@) |
是 | * / % | 乘法、除法、求模 |
是 | + - | 加法和减法 |
是 | >> << | 位右移、位左移 |
是 | & | 位与 |
是 | ^ | | 位异或、位或 |
是 | <= < > >= | 比较运算符 |
是 | <=> == === != =~ !~ | 相等和模式匹配运算符(!= 和 !~ 不能被定义为方法) |
&& | 逻辑与 | |
|| | 逻辑或 | |
.. ... | 范围(包含、不包含) | |
? : | 三元 if-then-else | |
= %= { /= -= += |= &= >>= <<= *= &&= ||= **= | 赋值 | |
defined? | 检查指定符号是否已定义 | |
not | 逻辑否定 | |
or and | 逻辑组成 |
注:オペレータ方法は、実際に方法であるとして列が識別され 、それはオーバーロードできます。