English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Ruby는 다양한 연산자를 지원합니다. 대부분의 연산자는 메서드 호출입니다. 예를 들어, a + b는 a로 해석됩니다.+(b)에서는 변수 a를 가리킵니다. + 메서드가 호출되고, b가 메서드 호출의 파라미터로 사용됩니다.
각 연산자에 대해(+ - * / % ** & | ^ << >> && ||)에 대해 모두 해당 축약형 할당 연산자가 있습니다.+= -= 등).
변수 a의 값은 다음과 같습니다: 10변수 b의 값은 다음과 같습니다: 20이면 다음과 같습니다:
연산자 | 설명 | 예제 |
---|---|---|
+ | 더하기 - 연산자 양쪽의 연산자를 더합니다 | a + b는 30 |
- | 빼기 - 왼쪽 연산자를 오른쪽 연산자에서 뺍니다 | a - b는 -10 |
* | 곱셈 - 연산자 양쪽의 연산자를 곱합니다 | a * b는 200 |
/ | 나눗셈 - 왼쪽 연산자를 오른쪽 연산자로 나눕니다 | b / a는 2 |
% | 모듈러 - 왼쪽 연산자를 오른쪽 연산자로 나누고 나머지를 반환합니다 | b % a는 0을 반환합니다 |
** | 지수 - 지수 계산을 수행합니다 | a**b는 10 의 20승 |
변수 a의 값은 다음과 같습니다: 10변수 b의 값은 다음과 같습니다: 20이면 다음과 같습니다:
연산자 | 설명 | 예제 |
---|---|---|
== | 두 연산자의 값이 같으면 조건이 참입니다 | (a == b)이 참이 아닙니다. |
!= | 두 연산자의 값이 같지 않으면 조건이 참입니다 | (a != b)이 참입니다. |
> | 왼쪽 연산자의 값이 오른쪽 연산자의 값보다 크면 조건이 참입니다 | (a > b)이 참이 아닙니다. |
< | 왼쪽 연산자의 값이 오른쪽 연산자의 값보다 작으면 조건이 참입니다 | (a < b)이 참입니다. |
>= | 왼쪽 연산자의 값이 오른쪽 연산자의 값보다 크거나 같으면 조건이 참입니다 | (a >= b)이 참이 아닙니다. |
<= | 왼쪽 연산자의 값이 오른쪽 연산자의 값보다 작거나 같으면 조건이 참입니다 | (a <= b)이 참입니다. |
<=> | 합성 비교 연산자. 첫 번째 연산자가 두 번째 연산자와 같으면 0을 반환하며 첫 번째 연산자가 두 번째 연산자보다 크면 1، 첫 번째 연산자가 두 번째 연산자보다 작으면 0을 반환합니다 -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를 반환합니다. |
변수 a의 값은 다음과 같습니다: 10변수 b의 값은 다음과 같습니다: 20이면 다음과 같습니다:
연산자 | 설명 | 예제 |
---|---|---|
= | 간단한 할당 연산자는 오른쪽 연산자의 값을 왼쪽 연산자에 할당합니다 | 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 코드로 초기화할 수 있습니다. 예를 들어:
a = 10 b = 20 c = 30
병렬 대입을 사용하면 더 빠르게 선언할 수 있습니다:
a, b, c = 10, 20, 30
병렬 대입은 두 변수의 값을 교환할 때 유용합니다:
a, b = b, c
비트 연산자는 비트에 작용하며, 비트별로 작업을 수행합니다.
a = 60이며, b = 13이진 형식으로, 다음과 같습니다:
a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
다음 표는 Ruby가 지원하는 비트 연산자를 나열합니다.
연산자 | 설명 | 예제 |
---|---|---|
& | 두 연산자 모두에 존재하는 경우, 이진 AND 연산자는 결과에 한 비트를 복사합니다. | (a & b)은 다음과 같이 됩니다: 120000로 되어 있습니다. 1100 |
| | 어떤 연산자에도 존재하는 경우, 이진 OR 연산자는 결과에 한 비트를 복사합니다. | (a | b)은 다음과 같이 됩니다: 6100으로 되어 있습니다.11 1101 |
^ | 하나의 연산자에만 존재하지만 두 연산자 모두에 존재하지 않는 경우, 이진 XOR 연산자는 결과에 한 비트를 복사합니다. | (a ^ b)은 다음과 같이 됩니다: 4900으로 되어 있습니다.11 0001 |
~ | 이진 보수 연산자는 일원 연산자로, "전환" 비트 효과를 가지며 0은 1로, 1은 0으로 됩니다.1,10으로 됩니다. | (~a)은 다음과 같이 됩니다: -610000로 되어 있습니다. 1100 0011부호화된 이진수의 보수 형식입니다. |
<< | 이진 왼쪽 이동 연산자입니다. 왼쪽 연산자의 값을 왼쪽 연산자가 지정한 비트수만큼 왼쪽으로 이동합니다. | a << 2 다음과 같이 됩니다: 240으로 되어 있습니다. 1111 0000 |
>> | 이진 오른쪽 이동 연산자입니다. 왼쪽 연산자의 값을 오른쪽 연산자가 지정한 비트수만큼 오른쪽으로 이동합니다. | a >> 2 다음과 같이 됩니다: 150000로 되어 있습니다. 1111 |
다음 표는 Ruby가 지원하는 논리 연산자를 나열합니다.
변수 a의 값은 다음과 같습니다: 10변수 b의 값은 다음과 같습니다: 20이면 다음과 같습니다:
연산자 | 설명 | 예제 |
---|---|---|
and | 명명된 논리과 연산자입니다. 두 연산자 모두 참이면 조건이 참으로 됩니다. | (a and b) 가 참입니다. |
or | 명명된 논리 또 연산자입니다. 두 연산자 중 하나라도 0이 아니면 조건이 참으로 됩니다. | (a or b) 가 참입니다. |
&& | 명명된 논리과 연산자입니다. 두 연산자 모두 0이 아니면 조건이 참으로 됩니다. | (a && b) 가 참입니다. |
|| | 명명된 논리 또 연산자입니다. 두 연산자 중 하나라도 0이 아니면 조건이 참으로 됩니다. | (a || b) 가 참입니다. |
! | 명명된 논리 비 연산자입니다. 연산자의 논리 상태를 반전합니다. 조건이 참이면 논리 비 연산자는 거짓으로 만듭니다. | !(a && b) 가 거짓입니다. |
not | 명명된 논리 비 연산자입니다. 연산자의 논리 상태를 반전합니다. 조건이 참이면 논리 비 연산자는 거짓으로 만듭니다. | not(a && b)는 거짓입니다。 |
두 개 이상의 연산이 하나의 연산자로 합쳐지는 경우가 있습니다. 첫 번째 연산은 표현식의 진위 값을 계산하고, 그 결과에 따라 두 번째 두 개의 문장 중 하나를 실행합니다. 조건 연산자의 문법은 다음과 같습니다:
연산자 | 설명 | 예제 |
---|---|---|
? : | 조건 표현식 | 조건이 참이면 ? X의 값을, 아니면 Y의 값을 반환합니다 |
Ruby에서 시퀀스 범위는 연속적인 값의 일렬을 생성하는 데 사용됩니다 - 시작 값, 종료 값( 필요에 따라) 그리고 그들 사이의 값이 포함됩니다.
Ruby에서 이러한 시퀀스는 ".."와 "..." 범위 연산자를 사용하여 생성됩니다. 두 점 형식으로 생성된 범위는 시작 값과 종료 값을 포함하며, 세 점 형식으로 생성된 범위는 시작 값만 포함하고 종료 값을 포함하지 않습니다.
연산자 | 설명 | 예제 |
---|---|---|
.. | 시작점에서 종료점까지의 범위를 생성합니다(종료점은 포함합니다) | 1..10 생성한 1 부터 10 의 범위 |
... | 시작점에서 종료점까지의 범위를 생성합니다(종료점은 포함하지 않습니다) | 1...10 생성한 1 부터 9 의 범위 |
defined?는 특별한 연산자로서, 전달된 표현식이 정의되었는지 여부를 메서드 호출 형식으로�断합니다. 표현식이 정의되지 않았으면, 그 표현식의 설명 문자열을 반환합니다. nil.
다음은 defined? 연산자의 다양한 사용법입니다:
defined? variable # 如果 variable 已经初始化,则为 True
예를 들어:
foo = 42 defined? foo # => "local"-variable" defined? $_ # => "global"-variable" defined? bar # => nil(未定义)
defined? method_call # 如果方法已经定义,则为 True
예를 들어:
defined? puts # => "method" defined? puts(bar) # => nil(在这里 bar 未定义) defined? unpack # => nil(在这里未定义)
# 如果存在可被 super 用户调用的方法,则为 True defined? super
예를 들어:
defined? super # => "super"(如果可被调用) defined? super # => nil(如果不可被调用)
defined? yield # # 如果已传递代码块,则为 True
예를 들어:
defined? yield # => "yield"(如果已传递块) defined? yield # => nil(블록이 전달되지 않았을 때)
메서드 이름 앞에 클래스나 모듈 이름과 .을 추가하여 클래스나 모듈 내의 메서드를 호출할 수 있습니다. 클래스나 모듈 이름과 두 개의 쌍점 ::를 사용하여 클래스나 모듈 내의 불변을 참조할 수 있습니다。
::는 일원 연산자로, 클래스나 모듈 내에서 불변, 예제 메서드 및 클래스 메서드를 정의할 수 있으며, 클래스나 모듈 외에서도 접근할 수 있습니다。
기억해 주세요:Ruby에서 클래스와 메서드도 불변으로 사용될 수 있습니다。
표현식의 불변 이름 앞에만 추가하면 됩니다. :: 프리كس, 적절한 클래스나 모듈 객체를 반환할 수 있습니다。
如果 :: 앞의 표현식이 클래스나 모듈 이름이면, 해당 클래스나 모듈 내에 해당하는 불변 값을 반환합니다;앞에 표현식이 없으면, 주 Object 클래스에 해당하는 불변 값을 반환합니다。 .
다음은 두 개의 예제입니다:
MR_COUNT = 0 # Object 메인 클래스에 정의된 불변 module Foo MR_COUNT = 0 ::MR_COUNT = 1 # 전역 카운트를 설정합니다: 1 MR_COUNT = 2 # 지역 카운트를 설정합니다: 2 end puts MR_COUNT # 전역 불변 puts Foo::MR_COUNT # 'Foo'의 지역 불변
두 번째 예제:
CONST = 'out there' class Inside_one CONST = proc {'in there'} def where_is_my_CONST ::CONST + 'inside one' end end class Inside_two CONST = 'inside two' def where_is_my_CONST CONST end end puts Inside_one.new.where_is_my_CONST puts Inside_two.new.where_is_my_CONST puts Object::CONST + Inside_two::CONST puts Inside_two::CONST + CONST puts Inside_one::CONST puts Inside_one::CONST.call + Inside_two::CONST
다음 표는 연산자의 우선순위를 높은 순서로 낮은 순서로 나열했습니다.
메서드 | 연산자 | 설명 |
---|---|---|
는 | :: | 불변 해석 연산자 |
는 | [ ] [ ]= | 요소 참조, 요소 집합 |
는 | ** | 지수 |
는 | ! ~ + - | 부정, 보상, 일원 덧셈, 일원 뺄셈(최종 두 개의 메서드 이름은 +@과 -@) |
는 | * / % | 곱셈, 나눗셈, 나머지 |
는 | + - | 덧셈과 뺄셈 |
는 | >> << | 비트 오른쪽 이동, 비트 왼쪽 이동 |
는 | & | 비트 AND |
는 | ^ | | 비트 이소각, 비트 또는 |
는 | <= < > >= | 비교 연산자 |
는 | <=> == === != =~ !~ | 상응 및 패턴 매칭 연산자(!=와!~는 메서드로 정의할 수 없음) |
&& | 논리 및 | |
|| | 논리 또는 | |
.. ... | 범위(포함, 포함하지 않음) | |
? : | 삼항 if-then-else | |
= %= { /= -= += |= &= >>= <<= *= &&= ||= **= | 할당 | |
defined? | 지정된 기호가 정의되었는지 확인 | |
not | 논리 부정 | |
or and | 논리 구성 |
주의:메서드 목록에 표시된 는 의 연산자는 실제 메서드이므로 재정의될 수 있습니다.