Ruby에서 문자열과 기호의 차이점은 무엇입니까?
Ruby에서 문자열과 기호의 차이점은 무엇이며 언제 다른 하나를 사용해야합니까?
주요 차이점은 단일 값을 나타내는 여러 기호는 동일하지만 문자열에서는 그렇지 않다는 것입니다. 예를 들면 :
irb(main):007:0> :test.object_id
=> 83618
irb(main):008:0> :test.object_id
=> 83618
irb(main):009:0> :test.object_id
=> 83618
그것들은 :test
모두 동일한 객체 인 기호에 대한 세 가지 참조 입니다.
irb(main):010:0> "test".object_id
=> -605770378
irb(main):011:0> "test".object_id
=> -605779298
irb(main):012:0> "test".object_id
=> -605784948
이들은 "test"문자열에 대한 세 가지 참조이지만 모두 다른 객체입니다.
이것은 기호를 사용하면 응용 프로그램에 따라 잠재적으로 좋은 메모리를 절약 할 수 있음을 의미합니다. 동일한 객체이기 때문에 심볼을 비교하는 것이 더 빠르며, 동일한 문자열을 비교하는 것은 객체 ID 대신 문자열 값을 비교해야하기 때문에 훨씬 느립니다.
언제 어느 것을 사용하는지에 관해서는 일반적으로 문자열이 아닌 고유 식별자를 원하는 해시 키와 같은 것을 제외하고 거의 모든 것에 문자열을 사용합니다.
기호와 문자열의 차이점은 무엇입니까?
- 기호는 변경 불가능합니다. 해당 값은 일정하게 유지됩니다.
- 동일한 심볼을 여러 번 사용하면 동일한 객체 ID를 가지며 매번 고유 한 객체 ID를 가진 다른 객체가되는 문자열과 비교하여 동일한 객체입니다.
split
Symbols 와 같은 String 메서드를 호출 할 수 없습니다 .
중국어라면理解 Ruby Symbol을 읽을 수도 있습니다 .
진술 :
foo = "bar"
메모리에 새 개체를 만듭니다. 이 문장을 반복하면 :
foo = "bar"
다른 개체를 만듭니다.
더 명확하게 이해하려면 IRB에서 다음 코드를 시도하십시오.
foo = "bar"
puts "string #{foo} with object id = #{foo.object_id}"
foo = "bar"
puts "string #{foo} with object id = #{foo.object_id}"
다음과 같은 출력이 표시됩니다.
string bar with object id = 70358547221180
string bar with object id = 70358548927060
동일한 문자열에 대해 두 개의 다른 객체가 있음을 명확하게 보여줍니다. 이제 심볼을 사용하면 심볼 당 하나의 객체 가 생성됩니다 .
foo = :bar
puts "symbol #{foo} with object id = #{foo.object_id}"
foo = :bar
puts "symbol #{foo} with object id = #{foo.object_id}"
쇼 :
symbol bar with object id = 7523228
symbol bar with object id = 7523228
이는에 대한 개체가 하나만 있음을 의미합니다 :bar
.
또한, 기호는 불변 과 같은 문자열 방법 중 하나를 호출 할 수 없습니다 upcase
또는 split
기호에 있습니다.
기호를 비교하는 것이 문자열을 비교하는 것보다 빠릅니다. 심볼은 힙의 메모리 포인터로 효과적으로 변환되는 고유 한 집합을 형성하는 상수 / 불변 문자열로 생각할 수 있습니다. 즉, 두 개의 정수 (메모리 포인터)를 비교하기 때문에 두 기호를 비교하는 것이 빠릅니다.
Strings are mutable so the memory pointer to their value on the heap can change after modification. This means comparison operations are slower because duplicates can exist that are semantically equivalent.
Use a symbol when you are sure that the value will remain constant, for example use symbols for hash keys. Use a string when you want to change the value or want to use a string method on it.
An additional difference between String
and Symbol
is that a String
has a lot more methods on it for string manipulation, while a Symbol
is a relatively lean object.
Check out the documentation for the String
class and the Symbol
class.
Case where symbol can be disaster. Lets say you have params.map(&:to_sym)
in your rails controller . Now here if you are converting the data provided by the user to symbol due to some reason then it could be dangerous. If the data provided by the user is too large and as we know that symbol is not a garbage collector, you might end up exhausting your server's memory which can takedown your website.
There are two main differences between String and Symbol in Ruby.
String is mutable and Symbol is not:
- Because the String is mutable, it can be change in somewhere and can lead to the result is not correct.
- Symbol is immutable.
String is an Object so it needs memory allocation
puts "abc".object_id # 70322858612020 puts "abc".object_id # 70322846847380 puts "abc".object_id # 70322846815460
In the other hand, Symbol will return the same object:
puts :abc.object_id # 1147868 puts :abc.object_id # 1147868 puts :abc.object_id # 1147868
So the String will take more time to use and to compare than Symbol.
Read "The Difference Between Ruby Symbols and Strings" for more information.
A symbol is something you use to represent names and strings. You would want to use a symbol when you may have need to use a string several times as this far easier and more productive.
And just found this via google, which may offer greater detail: Here you go
Symbols and strings are completely different this post has a little insight into the differences. As to when and where to use them, there is a pretty extensive post on this subject over on has many :through.
Strings are Mutable , Symbols arre immutable
Note:Mutable objects can be changed after assignment while immutable objects can only be overwritten http://www.robertsosinski.com/2009/01/11/the-difference-between-ruby-symbols-and-strings/
symbol is immutable and string is mutable.
when we perform any operation on string then it create a new object and take memory. As we perform more and more operation on string means we are consuming more and more memory.
symbol is object that are immutable mean if we perform any operation then it performs changes in original object, It will not create any object, that's why it is more profitable.
for more info, you can click here
'Program Tip' 카테고리의 다른 글
Spring에서 2 개 이상의 데이터베이스를 사용하는 방법은 무엇입니까? (0) | 2020.12.08 |
---|---|
.NET 응용 프로그램에 대한 사용자 설정을 저장하는 가장 좋은 방법은 무엇입니까? (0) | 2020.12.08 |
온 전성 테스트 / 검사 란? (0) | 2020.12.08 |
APK 서명 서명을 얻는 방법은 무엇입니까? (0) | 2020.12.08 |
Entity Framework 및 MongoDb (0) | 2020.12.08 |