2009-03-10 3 views

답변

3

in_channel 또는 Stream.t으로는 수행 할 수 없습니다. 여기에 몇 가지 제안 사항입니다 : 당신은 당신이 읽은 문자를 다시 넣는 경우

  1. , 당신은 요소를 제거하는 대신 스트림을 검사하는 데 사용 peek을 사용할 수 있습니다.

  2. 해당 기능에 대한 C 인터페이스를 직접 작성하는 것이 좋습니다. 나는 이것이 정말로 나쁜 생각이라는 것을 알 수있다.

  3. 누적기를 대신 사용해 보았습니까?

  4. 지퍼 또는 스택 또는 문자를 다시 밀어 넣을 수있는 다른 구조로 현재 기능을 둘러싼 모듈을 작성하십시오.

2

OCaml Batteries Included은 스트림에 대해 훨씬 더 포괄적이고 훨씬 높은 수준의 인터페이스를 제공합니다. 이것 좀보세요. 게다가, 일반적으로 좋아요.

+0

배터리는 양호하지만 IO 스트림에서이 기능을 (직접적으로) 지원하지 않습니다. –

+0

실제로 IO 추상화는 OCaml 표준 라이브러리의 IO 추상에 대한 반대에 의해 그것을 막지는 못합니다. 그래서 그것은 추가 될 수 있습니다. 이것은 아무 것도없는 것보다 낫습니다. – Yoric

1

기본적으로 할 수 없습니다. 배터리 (및 Extlib)는 향상된 I/O 래퍼를 제공하지만 둘 다이 기능을 지원하지 않습니다.

문자 수준의 읽기 만 수행하려는 경우 Enum (배터리 포함 BatEnum)의 I/O 스트림을 래핑하는 경우 배터리 또는 Extlib로 에뮬레이트 할 수 있습니다. Enum은 "다음 값 가져 오기"유형의 일반 열거 형을 제공하며 열거 형 앞에 값을 다시 푸시 할 수 있습니다. 따라서 Enum.next 함수를 사용하여 문자를 반환하는 char Enum.t 형식의 열거 형에 stdin을 래핑 한 다음 Enum.push을 사용하여 원하지 않는 문자를 앞으로 다시 푸시 할 수 있습니다.

푸시 글자의 의미를 망칠 수있는 내부 버퍼링을 수행하지 않는다고 처음 확인한 경우(BatIO)과 같은 열거 형을 다시 래핑하는 것이 가능할 수 있습니다.

관련 문제