옵션 참조 목록이있는 함수를 작성하고 각 참조가 None
이 아닌지 확인합니다. 즉, 기능을 원합니다.OCaml : 체크 참조가 모두 설정되었습니다.
let check rs =
List.for_all (fun r -> (!r) != None) rs
let _ =
check [ref (Some 5); ref (Some true)]
이것은 작동하지 않습니다. check
함수가 좋은 다형성 'a option ref list -> bool
형식으로 본질적으로 괜찮은 것처럼 보일지라도 컴파일러는 [ref (Some 5); ref (Some true)]
목록의 형식을 찾을 수 없습니다.
이 방법을 만들 수있는 방법이 있습니까? 나는 위의 장난감 예를 증류 한있는
내 실제 상황은, 내가 언급 한 무리에 명령 줄 인수의 수를 분석하고 있습니다 것입니다. 인수의 일부는 문자열이고 일부는 int 등입니다. 처음에는 모든 참조가 None
으로 설정되고 구문 분석기가 명령 줄 인수를 찾으면 해당 참조가 Some ...
으로 설정됩니다. 파싱을 마쳤으므로, 해당 명령 줄 인수를 필수로하고 싶기 때문에 참조 집합의 하위 집합을 반복하여 해당 집합이 여전히 None
이 아닌지 확인하려고합니다.
''a option list'는 list 요소가''a option '타입을 가지고 있고 모든 요소가 같은 타입이어야 함을 의미합니다. – ivg
'! ='대신'<>'를 사용하십시오. – newacct
@newacct 왜 그럴까요? –