OCaml에 대한 C++ 방법 istream::putback(char)
에 해당합니까?Ocaml에서 stdin으로 문자를 반환
stdin의 시작 부분에 어떻게 문자를 추가 할 수 있습니까?
OCaml에 대한 C++ 방법 istream::putback(char)
에 해당합니까?Ocaml에서 stdin으로 문자를 반환
stdin의 시작 부분에 어떻게 문자를 추가 할 수 있습니까?
in_channel
또는 Stream.t
으로는 수행 할 수 없습니다. 여기에 몇 가지 제안 사항입니다 : 당신은 당신이 읽은 문자를 다시 넣는 경우
, 당신은 요소를 제거하는 대신 스트림을 검사하는 데 사용 peek
을 사용할 수 있습니다.
해당 기능에 대한 C 인터페이스를 직접 작성하는 것이 좋습니다. 나는 이것이 정말로 나쁜 생각이라는 것을 알 수있다.
누적기를 대신 사용해 보았습니까?
지퍼 또는 스택 또는 문자를 다시 밀어 넣을 수있는 다른 구조로 현재 기능을 둘러싼 모듈을 작성하십시오.
OCaml Batteries Included은 스트림에 대해 훨씬 더 포괄적이고 훨씬 높은 수준의 인터페이스를 제공합니다. 이것 좀보세요. 게다가, 일반적으로 좋아요.
기본적으로 할 수 없습니다. 배터리 (및 Extlib)는 향상된 I/O 래퍼를 제공하지만 둘 다이 기능을 지원하지 않습니다.
문자 수준의 읽기 만 수행하려는 경우 Enum (배터리 포함 BatEnum)의 I/O 스트림을 래핑하는 경우 배터리 또는 Extlib로 에뮬레이트 할 수 있습니다. Enum은 "다음 값 가져 오기"유형의 일반 열거 형을 제공하며 열거 형 앞에 값을 다시 푸시 할 수 있습니다. 따라서 Enum.next
함수를 사용하여 문자를 반환하는 char Enum.t
형식의 열거 형에 stdin을 래핑 한 다음 Enum.push
을 사용하여 원하지 않는 문자를 앞으로 다시 푸시 할 수 있습니다.
푸시 글자의 의미를 망칠 수있는 내부 버퍼링을 수행하지 않는다고 처음 확인한 경우(BatIO)과 같은 열거 형을 다시 래핑하는 것이 가능할 수 있습니다.
배터리는 양호하지만 IO 스트림에서이 기능을 (직접적으로) 지원하지 않습니다. –
실제로 IO 추상화는 OCaml 표준 라이브러리의 IO 추상에 대한 반대에 의해 그것을 막지는 못합니다. 그래서 그것은 추가 될 수 있습니다. 이것은 아무 것도없는 것보다 낫습니다. – Yoric