2010-07-26 2 views
2

해시에서 기호를 사용하는 데 몇 가지 성가심이 있습니다. 예를 들어, 우리가 사용하는 JSON 젬은 파싱 된 모든 JSON 문자열에서 문자열을 반환하므로 JSON을 디코딩하여 생성 된 해시를 참조 할 때마다 문자열과 심볼의 조합을 사용하여 해시에 액세스해야합니다.어디에서나 문자열을 사용하고 Ruby on Rails에서 심볼을 사용하지 않아도됩니까?

스타일을 사용하면 문자열 만 사용하여 전체적으로 일관성있게 유지해도 괜찮습니까?

답변

3

문자열이 변경 가능하므로 참조 할 때마다 "foo" 루비가 새 객체를 만듭니다. irb에서 "foo".object_id을 호출하여이를 테스트 할 수 있습니다. 반면에 기호는 다르므로 :foo을 참조 할 때마다 동일한 객체가 반환됩니다.

"스타일"및 "일관성"과 관련하여 수신 된 json 데이터에 항상 hash.symbolize_keys!을 사용할 수 있습니다. 그러면 모든 문자열 키가 기호로 바뀝니다. 그리고 그 반대의 경우 - hash.stringify_keys!을 사용하여 문자열을 다시 만듭니다.

+0

? 나는 symbolize_keys를 생각하지 않는다! 또는 stringify_keys! – apiary

+1

@apiary를 업데이트하고,'symbolize_keys'의 재귀 버전을 직접 작성하여'Hash' 클래스에 혼합하십시오. –

0

해시 키가 기호 여야한다는 규칙은 없습니다.

규칙에 따라 기호 에서처럼 키가 많이 보입니다. 레일스는 여러 매개 변수를 허용하기 위해 전달하는 해시를 많이 사용하며 이러한 해시의 키는 흔히 기호임을 나타내는 기호입니다 메소드 호출에 대한 예상/허용 가능한 매개 변수. 우리 사이의 우유부단를 들어

관련 문제