2014-09-20 2 views
0

다음은 많이 놀랐습니다!GEB의 Navigator.find 함수가 술어를 삭제합니다. 좋은 습관입니까?

/** 
* Optimizes the selector if the predicates contains `class` or `id` keys that map to strings. Note this method has 
* a side-effect in that it _removes_ those keys from the predicates map. 
*/ 

내 질문 : 다음 문장에서 술어가

String selector = 'ul' 
Map predicates = [class: 'catalog'] 

navigator.find predicates, selector 

를 제거됩니다 나는이 문제에 대해 다음과 같은 의견을 냈다. 함수로 들어오는 데이터를 무언가로 바꾸는 것은 좋은 매너의 규칙입니다.

나는 C++에서 이러한 사례를 기억하지만 무결성의 세계 우선 순위는 함수 호출자를 희생하여 최적화 된 코드보다 높습니다!

내 프로그램에서이 동작을 만났고 실행 중에 내 정의 구조가 변경되는 이유를 알아 내기 위해 많은 시간을 보냈습니다. 메모리 누수에 대한 생각은 이미 다가오고있었습니다.

답변

1

실제로 이것은 나쁜 습관이므로 수행해서는 안됩니다. 나는 누군가가 Navigator.find()에 전달 된 술어 맵을 재사용 할 수 있다고 생각하지는 않았지만 귀하의 유스 케이스는 완전히 유효합니다.

Geb's issue tracker에 티켓을 만드십시오.

관련 문제