루비 연산자


Ruby는 다양한 연산자를 지원합니다. 대부분의 연산자는 실제로 메서드 호출입니다. 예를 들어, a + b는 a.+(b)로 해석됩니다. 여기서 변수 a를 가리키는 + 메서드는 b를 메서드 호출에 대한 인수로 사용하여 호출됩니다.

각 연산자(+ - * / % ** & | ^ << >> && ||)에 해당하는 약식 할당 연산자(+= -= 등)가 있습니다.

Ruby 산술 연산자

변수 a의 값이 10이고 변수 b의 값이 20이라고 가정하고,

OperatorDescriptionExample
+Add ition - 작업 추가 기호 양쪽에 있는 피연산자 a + b는 30
-빼기 - 오른쪽 피연산자에서 왼쪽 피연산자를 빼면 a - b는 -10
*곱셈을 얻습니다. - 연산자의 양쪽 피연산자를 곱합니다. a * b는 200
/을 얻습니다. 나눗셈 - 왼쪽 피연산자를 오른쪽 피연산자로 나눕니다. b / a는 2
% 을 얻습니다. 모듈로 - 왼쪽 피연산자를 오른쪽 피연산자로 나누고 나머지를 반환합니다. b % a는 0
**ExComponent를 얻습니다. 지수 계산을 수행합니다. a**b는 10의 20제곱을 얻습니다.

Ruby 비교 연산자

변수 a의 값이 10이고 변수 b의 값이 20이라고 가정하면 다음과 같습니다.

OperatorDescriptionExample
==두 연산을 확인하세요. 숫자의 값이 동일하면 조건이 true입니다. (a == b)는 사실이 아닙니다.
!= 두 피연산자의 값이 같은지 확인하고, 그렇지 않으면 조건이 true인지 확인합니다. (a != b)는 사실입니다.
> 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 큰지 확인하고, 그렇다면 조건이 true입니다. (a > b)는 사실이 아닙니다.
< 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작은지 확인하고, 그렇다면 조건은 true입니다. (a < b)는 참입니다.
>= 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 크거나 같은지 확인하고, 그렇다면 조건이 true입니다. (a >= b)는 사실이 아닙니다.
<=왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작거나 같은지 확인하고, 그렇다면 조건이 true입니다. (a <= b)는 사실입니다.
<=>Union 비교 연산자. 첫 번째 피연산자가 두 번째 피연산자와 같으면 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 할당 연산자

변수 a의 값이 10이고 변수 b의 값이 20이라고 가정하면 다음과 같습니다.

OperatorDescriptionExample
=단순 할당 연산자 , 할당 오른쪽 피연산자의 값을 왼쪽 피연산자에 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 코드로 여러 변수를 초기화할 수 있습니다. 예:

a = 10
b = 20
c = 30

더 빠르게 선언하려면 병렬 할당을 사용하세요.

a, b, c = 10, 20, 30

병렬 할당은 두 변수의 값을 교환할 때도 유용합니다.

a, b = b, c

Ruby 비트 연산자

비트 연산자는 비트 단위로 작동합니다. 작업 수행 .

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에서 지원하는 비트 연산자가 나열되어 있습니다.

OperatorDescriptionExample
& 이진 AND 연산자는 두 피연산자 모두에 있는 경우 결과에 1비트를 복사합니다. (a & b)는 12, 즉 0000 1100을 제공합니다.
|두 피연산자 모두에 있는 경우 이진 OR 연산자는 결과에 1비트를 복사합니다. (a | b)는 0011 1101인 61을 얻습니다.
^피연산자 중 하나에만 있고 둘 다에는 없으면 이진 XOR 연산자는 결과가 진행 중입니다. (a ^ b)는 49, 즉 0011 0001
~ 2의 보수 연산자는 비트를 "뒤집는" 효과가 있는 단항 연산자입니다. (~a )는 -61, 즉 1100 0011, 2의 보수, 부호 있는 이진수를 제공합니다.
<<이진 왼쪽 시프트 연산자. 왼쪽 피연산자의 값은 오른쪽 피연산자가 지정한 비트 수만큼 왼쪽으로 이동합니다. a << 2는 240을 얻으며 이는 1111 0000
>이진 오른쪽 시프트 연산자입니다. 왼쪽 피연산자의 값은 오른쪽 피연산자가 지정한 비트 수만큼 오른쪽으로 이동합니다. a >> 2는 15를 얻게 되며 이는 0000 1111

Ruby 논리 연산자

다음 표에는 Ruby에서 지원하는 논리 연산자가 나열되어 있습니다.

변수 a의 값이 10이고 변수 b의 값이 20이라고 가정하면 다음과 같습니다.

OperatorDescriptionExample
and을 논리 AND 연산자라고 합니다. 두 피연산자가 모두 true이면 조건은 true입니다. (a와 b)는 사실입니다.
or을 논리 OR 연산자라고 합니다. 두 피연산자 중 하나라도 0이 아니면 조건은 참입니다. (a 또는 b)는 사실입니다.
&&을 논리 AND 연산자라고 합니다. 두 피연산자가 모두 0이 아니면 조건은 참입니다. (a && b)는 사실입니다.
||을 논리 OR 연산자라고 합니다. 두 피연산자 중 하나라도 0이 아니면 조건은 참입니다. (a || b)는 사실입니다.
!을 논리 NOT 연산자라고 합니다. 피연산자의 논리적 상태를 반전시키는 데 사용됩니다. 논리 NOT 연산자는 조건이 참인 경우 거짓으로 만듭니다. !(a && b)는 거짓입니다.
not을 논리 NOT 연산자라고 합니다. 피연산자의 논리적 상태를 반전시키는 데 사용됩니다. 논리 NOT 연산자는 조건이 참인 경우 거짓으로 만듭니다. not(a && b)는 거짓입니다.

Ruby 삼항 연산자

삼항 연산자라는 연산이 두 개 이상 있습니다. 첫 번째는 표현식의 참 또는 거짓 값을 계산한 후 이 결과를 기반으로 다음 두 문 중 하나를 실행하기로 결정합니다. 조건 연산자의 구문은 다음과 같습니다.

OperatorDescriptionInstance
? :조건식조건이 true이면 값은 X입니다. 그렇지 않으면 값은 다음과 같습니다. Y

Ruby 범위 연산자

Ruby에서 시퀀스 범위는 시작 값, 끝 값(적절한 경우) 및 그 사이의 값을 포함하여 일련의 연속 값을 만드는 데 사용됩니다.

Ruby에서 이러한 시퀀스는 ".." 및 "..." 범위 연산자를 사용하여 생성됩니다. 2점 형식으로 생성된 범위에는 시작 값과 끝 값이 포함되며, 3점 형식으로 생성된 범위에는 시작 값만 포함되고 끝 값은 포함되지 않습니다.

OperatorDescriptionInstance
..시작점부터 끝점까지의 범위를 만듭니다(끝점 포함) 1..10 1부터 10까지의 범위 만들기
...시작점부터 끝점까지 범위 생성(종료점 제외) 1...10 1부터 9까지의 범위 생성

Ruby 정의? 연산자

defined?는 전달된 표현식이 메서드 호출 형식으로 정의되었는지 여부를 결정하는 특수 연산자입니다. 표현식을 설명하는 문자열을 반환하거나 표현식이 정의되지 않은 경우 nil을 반환합니다.

다음은 정의된? 연산자의 다양한 사용법입니다.

Usage 1

defined? variable # 如果 variable 已经初始化,则为 True

예:

foo = 42
defined? foo    # => "local-variable"
defined? $_     # => "global-variable"
defined? bar    # => nil(未定义)

Usage 2

defined? method_call # 如果方法已经定义,则为 True

예:

defined? puts        # => "method"
defined? puts(bar)   # => nil(在这里 bar 未定义)
defined? unpack      # => nil(在这里未定义)

Usage 3

# 如果存在可被 super 用户调用的方法,则为 True
defined? super

예:

defined? super     # => "super"(如果可被调用)
defined? super     # => nil(如果不可被调用)

사용법 4

defined? yield   # 如果已传递代码块,则为 True

예:

defined? yield    # => "yield"(如果已传递块)
defined? yield    # => nil(如果未传递块)

Ruby 도트 연산자 "." 및 이중 콜론 연산자 "::"

메서드 이름 앞에 모듈 이름과 밑줄을 추가하여 모듈 메서드를 호출할 수 있습니다. 모듈 이름과 두 개의 콜론을 사용하여 상수를 참조할 수 있습니다.

::는 상수, 인스턴스 메서드 및 클래스 메서드를 클래스나 모듈 내에서 정의하고 클래스나 모듈 외부 어디에서나 액세스할 수 있도록 하는 단항 연산자입니다.

기억하세요: 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

Ruby 연산자의 우선순위

다음 표에는 우선 순위에 따라 모든 연산자가 높은 것부터 낮은 것 순으로 나열되어 있습니다.

은 은 은 <=> === != =~ !~ + ternary if-then-elseAssignment지정된 기호가 정의되어 있는지 확인하세요논리적 부정논리적 구성

참고: 메서드 열에서 로 식별된 연산자는 실제로 메서드이므로 오버로드될 수 있습니다.

메서드 연산자 설명
:: 상수 구문 분석 연산자
[ ] [ ] = 요소 참조, 요소 컬렉션
is **exComponent
is! ~ + -non, 보수, 1달러 더하기, 1달러 빼기(마지막 두 가지 방법의 이름은 +@ 및 -@입니다)
* / %곱하기, 나누기, 모듈러스
+ - 덧셈과 뺄셈
>> Shift
& 비트별 및
^ | 비트 XOR, 비트 OR
< > >= 연산자 비교
동등 및 패턴 일치 연산자(!= 및 !~는 메소드로 정의할 수 없음)
? :
= %= { /= -= += |= &= >>= <<= *= &&= ||= **=
정의되었나요?
not
또는