Ruby Language
심볼
수색…
통사론
- :상징
- :'상징'
- :"상징"
- "기호".to_sym
- % s {기호}
비고
문자열을 통한 기호 사용의 이점 :
1. 루비 기호는 O (1) 비교가있는 객체입니다.
두 문자열을 비교하려면 잠재적으로 모든 문자를 볼 필요가 있습니다. 길이가 N 인 두 문자열의 경우 N + 1 비교가 필요합니다.
def string_compare str1, str2
if str1.length != str2.length
return false
end
for i in 0...str1.length
return false if str1[i] != str2[i]
end
return true
end
string_compare "foobar", "foobar"
그러나 foobar가 나타날 때마다 동일한 객체를 참조하므로 객체 ID를 통해 심볼을 비교할 수 있습니다. 우리는 하나의 비교로 이것을 할 수 있습니다. (O (1))
def symbol_compare sym1, sym2
sym1.object_id == sym2.object_id
end
symbol_compare :foobar, :foobar
2. 루비 기호는 자유 형식 열거 형의 레이블입니다.
C ++에서는 "상수"를 사용하여 관련 상수의 계열을 나타낼 수 있습니다.
enum BugStatus { OPEN, CLOSED };
BugStatus original_status = OPEN;
BugStatus current_status = CLOSED;
하지만 Ruby는 동적 언어이기 때문에 BugStatus 유형을 선언하거나 합법적 인 값을 추적 할 필요가 없습니다. 대신 열거 형 값을 기호로 나타냅니다.
original_status = :open
current_status = :closed
3. 루비 기호는 상수, 고유 한 이름입니다.
Ruby에서는 문자열의 내용을 변경할 수 있습니다.
"foobar"[0] = ?b # "boo"
그러나 우리는 기호의 내용을 변경할 수 없습니다 :
:foobar[0] = ?b # Raises an error
4. Ruby 기호는 키워드 인수의 키워드입니다.
루비 함수에 키워드 인수를 전달할 때, 심볼을 사용하여 키워드를 지정합니다 :
# Build a URL for 'bug' using Rails.
url_for :controller => 'bug',
:action => 'show',
:id => bug.id
5. 루비 기호는 해시 키를위한 탁월한 선택입니다
일반적으로 기호를 사용하여 해시 테이블의 키를 나타냅니다.
options = {}
options[:auto_save] = true
options[:show_comments] = false
심볼 만들기
Symbol
객체를 만드는 가장 일반적인 방법은 문자열 식별자 앞에 콜론을 붙이는 것입니다.
:a_symbol # => :a_symbol
:a_symbol.class # => Symbol
다음은 String
리터럴과 함께 Symbol
을 정의하는 몇 가지 다른 방법입니다.
:"a_symbol"
"a_symbol".to_sym
기호는 %q
및 %Q
가 문자열에 대해 작동하는 것과 유사한 임의의 구분 기호를 지원하는 %s
시퀀스를 가지고 있습니다.
%s(a_symbol)
%s{a_symbol}
%s
는 공백이 포함 된 입력에서 기호를 만드는 데 특히 유용합니다.
%s{a symbol} # => :"a symbol"
몇 가지 흥미로운 기호 ( :/
, :[]
, :^
등)는 특정 문자열 식별자로 만들 수 있지만 기호는 숫자 식별자를 사용하여 만들 수 없습니다.
:1 # => syntax error, unexpected tINTEGER, ...
:0.3 # => syntax error, unexpected tFLOAT, ...
기호는 하나의 기호로 끝날 수 ?
또는 !
기호의 식별자로 문자열 리터럴을 사용할 필요가 없습니다.
:hello? # :"hello?" is not necessary.
:world! # :"world!" is not necessary.
심볼을 만드는 이들 서로 다른 메소드는 모두 같은 객체를 반환합니다.
:symbol.object_id == "symbol".to_sym.object_id
:symbol.object_id == %s{symbol}.object_id
Ruby 2.0 이후로 단어들로부터 심볼의 배열을 생성하는 지름길이 있습니다 :
%i(numerator denominator) == [:numerator, :denominator]
문자열을 기호로 변환
주어진 String
:
s = "something"
Symbol
으로 변환하는 몇 가지 방법이 있습니다.
s.to_sym
# => :something
:"#{s}"
# => :something
기호를 문자열로 변환
주어진 Symbol
:
s = :something
이를 String
으로 변환하는 가장 간단한 방법은 Symbol#to_s
메서드를 사용하는 것입니다.
s.to_s
# => "something"
이를 수행하는 또 다른 방법은 Symbol#to_s
메소드의 별명 인 Symbol#id2name
메소드를 사용하는 것입니다. 그러나 Symbol
클래스에 고유 한 메서드입니다.
s.id2name
# => "something"