2016-12-16 1 views
0

나는 내가 본 대부분의 꼭두각시 예에서 사용되는 중복 엄청난 양의 것으로 보이는 피하려는 매개 변수 :받기 모든 꼭두각시 클래스는

class foo(
    String arg1 = '', 
    String arg2 = '' 
){ 
    # [email protected] is like [email protected] in POSIX shell 
    [email protected] {|k, v| if k[v] != '' { contain $v } } 
} 
같은 더 실용적인 뭔가

class foo(
    String arg1 = '', 
    String arg2 = '', 
    ... 
){ 
    if arg1 != '' { 
     ... 
    } 
    if arg2... 
} 

+2

키가 중요하지 않은 경우 인수가 배열이 아니어야하며'named $ values ​​'를 사용하여 명명 된 클래스를 모두 포함해야합니까? 이 예제는 조금 고안된 것 같습니다. 더 나은 답변을 제공하는 실제적인 매니페스트를 보는 것이 유용 할 것입니다. –

+0

그래, 여기서 내용의 부족으로 부울 조건부를 람다 반복기로 리팩토링하여 여기에서 성취하려고하는 것이 분명하지 않은 것처럼 보입니다. –

+0

@DominicCleal \t 좋은 예 : https://github.com/example42/control-repo/blob/production/site/profile/manifests/base/linux.pp 특히 매개 변수를 조건문에 복제하는 것. – nwmcsween

답변

1

내가 알고있는 [email protected]과 같은 구조가 없으므로 모든 데이터를 별도의 매개 변수 대신 해시에 배치하는 것이 좋습니다. 즉

class foo(
    String $pre_class, 
    Hash[Enum['network', 'mail'], String] $classes = {}, 
){ 

당신도 키를 필요로하지 않기 때문에, 사용 유형 Hash[Enum['network', 'mail', '...'], String]을 가진 단일 매개 변수가 고정 된 문자열 매개 변수의 수에 상당히 동등한 것 때문에 수행되는 매개 변수의 유효성 검사는 없다 해시의 모든 내용으로 충분할 것입니다. values()stdlib 함수입니다. 당신이 빈 값을 제거하기 위해 필요한 경우

contain(values($classes)) 
Class[$pre_class] -> Class[values($classes)] 

후 사용 filter() function :

$filtered_classes = $classes.filter |$type_name, $class_name| { $class_name != '' } 

내가 지정된 클래스는 매우 일반적인 모듈입니다 생각하지 않습니다 추가해야합니다. 이것은 프로파일 모듈이며 매우 일반적이며 재사용 가능하도록 설계되었습니다. 아마도 더 전형적인 로컬 작성 프로파일 모듈은 클래스 이름이 매개 변수 값으로 주어지고 더 하드 코딩 된 동작을하는 정도까지 구성 가능할 것입니다.