2011-04-25 4 views
1

내가 응용 프로그램 구성 YAML을로드하려고 해요 - 나는 통과 할 스타일의 나무 :이로드있어이송 YAML

 
style: 
    name: Retro 
style: 
    name: Nouveau 
style: 
    name: Plain 

을 다음 초기화 사용 :

 
STYLES = YAML.load_file("#{RAILS_ROOT}/config/styles.yml") 

각 스타일을 STYLES [: 스타일] .each 또는 유사한 기능을 사용하여 트래버스 할 수 있기를 원합니다. 이것은 실패하고 STYLES는 마지막으로 나열된 것을 반환합니다. 나는 정말로 xml을 사용하고 싶지 않다. 왜냐하면 yaml로이 작업을하는 방법이 있는가?

그렇지 않은 경우 제안 사항을 알려 주시면 감사하겠습니다.

답변

2

스타일 트리 yaml이 원하는 방식으로 작동하지 않습니다. 다른 이름을 가진 여러 스타일을 지원하기 위해 다시 구조화해야합니다.

Retro: 
    type: style 
Nouvaeu: 
    type: style 
Plain: 
    type: style 

각 블록을 새로운 개체로 생각하십시오. 이제 다음을 사용하여 액세스 할 수 있습니다.

plain_style = YAML.load_file("#{RAILS_ROOT}/config/styles.yml")['Plain'] 
plain_style['type'] >>> "style" 
+0

많은 덕분에,이 :)을 시도합니다 –

0

이것은 조나단 (다른 말로하면 정확함)보다 더 많은 답변입니다.

Yaml은 xml보다 json과 비슷한 형식입니다. Yaml과 json은 대부분의 언어에서 공통적으로 사용되는 기본적이고 자주 사용되는 데이터 구조를 단순하게 표현하기 위해 설계되었습니다 (그리고 스크립팅 언어에서 많이 사용됨). Xml은 다양한 문서 유형을 쉽게 혼합 할 수 있도록 다양한 기능을 갖춘 마크 업 언어 및 메타 사양으로 설계되었습니다.

Yaml에서 가장 기본적이고 자주 사용되는 컨테이너는 시퀀스와 맵입니다. 프로그래밍 언어에서 시퀀스는 종종리스트 또는 배열이라고 불리며, 맵은 종종 사전, 해시, 해시 맵 또는 배열로 불립니다 (이것은 이상한데 PHP를보고 있습니다).

그래서 문서는 YAML/JSON에 해당합니다 (유효 두 가지 유형으로) 문서 :

{"style": {"name": "Retro"}, "style": {"name": "Nouveau"}, "style": {"name": "Plain"}} 

난 당신이 JSON 또는 어떤 문제를 볼 수는 상당히 쉽게 {} 스타일지도와 모든 언어를 알고 입니다. 이을 writting 것은 루비에는 다음과 같습니다

{"style" => ..., "style" => ..., "style" => ...} 

마지막 키/값 쌍은 이전을 덮어 이전 그들은에서 얻을 불가능하다. 따라서 문서 형식을 변경해야합니다.

제안 1 개

조나단 줄리안의 제안은 상당히 좋은 :

Retro: 
    type: style 
Nouvaeu: 
    type: style 
Plain: 
    type: style 

제안이

아마 같은 것을 사용하는 것이

: "스타일"을 떠나 단순히

styles: 
    Retro: 
    Nouvaeu: 
    Plain: 

또는를 문맥에 의해 함축되어 있다면 모두 삭제하십시오.

제안 3

XML을 사용하는 더처럼 다른 예!쌍

!!pair 
- style: 
    name: Retro 
- style: 
    name: Nouveau 
- style: 
    name: Plain 

이 더 많거나 데이터 구조에 해당 (파서/언어에 따라) 덜되어

[("style", {"name": "Retro"}), 
("style", {"name": "Nouveau"}), 
("style", {"name": "Plain"})]