2014-09-05 8 views
-2

레일과 루비를 배우려고합니다. 그런 다음 질문이 있습니다.루비의 함수에 심볼을 매개 변수로 사용하기

나는 기호 만 사용하는 함수를 만들 수 있음을 알았습니다. 대신 해시를 사용합니다. 예를 들어

:

a={b: "hash value", c: "another has value"} 
printValue(:b) 

사실이 하나입니다 당신은 예를 들어 줄 수 있습니까? 내가 검색하려고했지만 찾지 못했습니다.

+0

[함수가 Ruby에서 해시 인수를 사용하는 방법은 무엇입니까?] (http://stackoverflow.com/questions/16576477/how-do-functions-use-hash-arguments-in-ruby) –

+0

이것은 순수한 루비 질문입니다. 그래서 Rails 태그는 없습니다. 부적절한 태그를 추가하면 일부 회원은 관심이없는 질문을 읽는 데 시간을 낭비하게되며 다른 회원은 해당 태그로 질문을 필터링하면 관심있는 질문을 놓칠 수 있습니다. –

+0

캐리 감사합니다. 레일스 태그를 삭제했습니다. – wendy0402

답변

2

루비를 배우는 사람들이 기호를 이해하지 못하는 것이 일반적입니다. 심볼은 다른 루비 타입과 마찬가지로 표준 루비 타입입니다. 다음은 심볼이 특정 유형의 오브젝트 인 방법의 예입니다.

'A'.class # => String 
1.class # => Fixnum 
:a.class # => Symbol 

다른 유형과 마찬가지로 기호에는 메소드가 있습니다. IRB를 열고 :a.methods.sort을 입력하면 심볼에 대해 호출 할 수있는 모든 메소드가 표시됩니다. 예 : :a.to_s # => 'a'

잘 알고 있듯이 기호는 종종 Hash 키로 사용됩니다. 그러나, 다른 유형도 Hash 키가 될 수 있습니다 당신처럼

my_hash = { 'A' => 'an A', 1 => 'a 1', :a => 'the symbol a'} 
my_hash['A'] # => 'an A' 
my_hash[1] # => 'a 1' 
my_hash[:a] # => 'the symbol a' 

이 방법에 String 또는 다른 유형을 전달할 수 있습니다, 당신은 Symbol를 전달할 수 있습니다. 실제로 마지막 예에서 String, FixnumSymbol ~ my_hash[] 메소드를 전달합니다.

사람들이 해시 키의 기호를 정말 좋아하는 이유는 재사용이 매우 가볍기 때문입니다. 다음은 기호와 다른 개체 사이의 주요 차이점 중 하나 보여주는 예입니다 : 당신이 볼 수 있듯이

"a".object_id # => 70098399407740 
"a".object_id # => 70098399393460 
"a".object_id # => 70098399388140 
:a.object_id # => 359368 
:a.object_id # => 359368 
:a.object_id # => 359368 

, 나는 값 "는"이 세 개의 문자열을 생성, 그리고 그들이 각각 다른 개체 ID를 . 즉, 값이 "a"인 메모리에 세 개의 String 개체가 있습니다. 대조적으로, 내가 :a을 사용할 때마다 동일한 객체 ID를 갖습니다. 내 전체 프로그램에는 하나의 :a 개체 만 있습니다.

기호를 메소드에 전달하는 것이 일반적입니다. 이것을 Rails에서 많이 볼 수 있습니다.

관련 문제