2014-11-25 2 views
1

요리 책에서 사용하는 몇 가지 공통 기능에 대한 LWRP를 만드는 옵션이 있습니다. 노드 속성을 전달하고 LWRP에서 업데이트하는 방법이 있습니까?요리사 노드 속성 전달 및 업데이트

두 번째 옵션은 라이브러리 함수를 만드는 것입니다. 노드 속성이 호출자에 의해 라이브러리 함수에 전달되면 함수에서 새 값을 설정하는 방법은 무엇입니까?

위의 정보에 대한 조언이 많습니다.

답변

1

많은 확실한 답변이 필요합니다.

당신은 그냥 읽고 및 설정이

이 그럼 당신은 자원/공급자가 아닌 라이브러리 함수를 사용하는 것이 좋습니다 속성을합니다. node 개체는 이미 라이브러리와 LWRP 모두에서 사용할 수 있으므로 아무 것도 "전달"할 필요가 없습니다. 애트리뷰트는 항상 node['path']['to']['attribute']과 동일한 방식으로 액세스 할 수 있으며 node.default['path']['to']['attribute'] (또는 .normal, .override 등)이라는 레시피와 동일하게 설정할 수 있습니다. 당신이 정말로 공상적이고, 메소드 변수를 만들고 싶다면, 당신은 이와 같은 것을 할 수 있습니다.

* 테스트되지 않은 코드는 당신이 뭔가를 수행하는 경우

def check_and_set(*attr_path, &check) 
    current, parent = node 
    leaf = nil 
    current = attr_path.reduce do |current, branch| 
    current[branch] 
    parent = current 
    leaf = branch 
    value = check.yield(current) 
    parent[leaf] = value 
end 

(블록에 속성의 현재 값을 전달하는 속성의 경로를 소요되며, 블록의 반환 값으로 그 속성을 설정합니다) 값이

설정을 읽는 것이 아니라면 LWRP가 필요할 수 있습니다. 위에 명시된 모든 내용이 여전히 적용됩니다. node 개체는 여전히 사용할 수 있으며 레시피에서와 마찬가지로 개체를 읽고 쓸 수 있습니다.

+1

또한 라이브러리를로드 할 때'node'가 예상 한 데이터가 아닐 수도 있습니다. 노드 함수를 라이브러리 함수에 전달하는 것이 항상 좋은 방법입니다. 따라서 호출 할 때, 컴파일 할 때, 또는 노드 값을 무시하는 모든 요리 책이로드되기 전에 잠재적으로 노드를 얻게됩니다. – Martin

+0

감사 Tejay & 마틴. –

관련 문제