OCaml을 처음 사용하고 일부 OCaml 코드를 디버깅하려고합니다. OCaml에서 대부분의 객체를 출력으로 인쇄 할 수있는 Java의 toString()
함수와 동일한 기능이 있습니까?OCaml에서 toString()이 (가)
답변
Pervasives 모듈에는 string_of_int, string_of_float, string_of_bool과 같은 기능이 있습니다 (Pervasive이기 때문에 Pervasives 모듈을 열 필요가 없습니다).
또는 Printf를 사용하여 이러한 종류의 출력을 수행 할 수 있습니다. 예를 들면 :
let str = "bar" in
let num = 1 in
let flt = 3.14159 in
Printf.printf "The string is: %s, num is: %d, float is: %f" str num flt
거기 PRINTF 모듈에서의 sprintf 함수는, 그래서 당신은 그냥 표준 출력 대신 인쇄의 문자열을 생성하기를 원한다면 당신이 마지막 라인을 대체 할 수 :
let output = Printf.sprintf "The string is: %s, num is: %d, float is: %f" str num flt
들어 더 복잡한 데이터 유형을 정의하려면 Deriving 확장자를 사용하여 유형에 맞는 예쁜 프린터 함수를 정의 할 필요가 없습니다.
Sexplib 라이브러리도 유용 할 수 있습니다. – Kakadu
코어 및 관련 Sexplib 구문 확장을 사용하는 경우이 문제에 대한 해결책이 있습니다. 본질적으로 sexplib은 OCaml 형식에서 s 식과 변환기를 자동으로 생성하여 편리한 serialization 형식을 제공합니다.
다음은 Core 및 Utop을 사용한 예입니다. 당신이 자신 코어를 사용하도록 설정 얻기를 위해 다음과 같은 지침을 따르 확인 : http://realworldocaml.org/install이
utop[12]> type foo = { x: int
; y: string
; z: (int * int) list
}
with sexp;;
type foo = { x : int; y : string; z : (int * int) list; }
val foo_of_sexp : Sexp.t -> foo = <fun>
val sexp_of_foo : foo -> Sexp.t = <fun>
utop[13]> let thing = { x = 3; y = "hello"; z = [1,1; 2,3; 4,2] } ;;
val thing : foo = {x = 3; y = "hello"; z = [(1, 1); (2, 3); (4, 2)]}
utop[14]> sexp_of_foo thing;;
- : Sexp.t = ((x 3) (y hello) (z ((1 1) (2 3) (4 2))))
utop[15]> sexp_of_foo thing |> Sexp.to_string_hum;;
- : string = "((x 3) (y hello) (z ((1 1) (2 3) (4 2))))"
당신은 또한 다음과 같은 인라인 인용 구문을 사용하여 이름이 지정되지 않은 유형의 sexp 컨버터를 생성 할 수 있습니다.
utop[18]> (<:sexp_of<int * float list>> (3,[4.;5.;6.]));;
- : Sexp.t = (3 (4 5 6))
더 많은 세부 사항은 여기에 있습니다 : https://realworldocaml.org/v1/en/html/data-serialization-with-s-expressions.html
- 1. 즉석의 toString이 앞에 더하기
- 2. ToString이 인텔리 센스에 표시되지 않습니다.
- 3. toString이 작동하지 않는 곳은 어디입니까?
- 4. stringbuffer toString이 동일한 정적 문자열
- 5. Ocaml에서 오버로딩
- 6. Ocaml에서 재귀
- 7. OCaml에서 인터리브
- 8. OCaml에서 목록 회전하기
- 9. OCaml에서 카운트 다운 게임
- 10. Java/Android Edittext.gettext(). toString이 작동하지 않습니다.
- 11. 왜 배열의 .toString이 이상한 결과를 가져 옵니까?
- 12. ToString이 데이터 바인딩과 작동하지 않는 이유
- 13. ToString이 BsonDocument 하위 클래스에서 예상대로 작동하지 않습니다.
- 14. .toString이 배열 값에서 작동하지 않습니까? (Jscript)
- 15. 왜 scala toString이 Any 유형을 제공합니까?
- 16. Ocaml에서 stdin으로 문자를 반환
- 17. OCaml에서 float를 int로 캐스팅합니다.
- 18. ocaml에서 해시 테이블 마샬링
- 19. OCaml에서 라이브러리를 작성하려면 어떻게해야합니까?
- 20. OCaml에서 함수의 인수로리스트 사용하기
- 21. Ocaml에서 두리스트를 비교하십시오
- 22. ocaml에서 이상한 구문 오류
- 23. OCaml에서 재귀 도움말
- 24. Ocaml에서 @ 기호를 인쇄하는 방법
- 25. OCaml에서 haskell의 zipwith와 같습니다.
- 26. OCaml에서 테스트 더블 만들기
- 27. OCaml에서 바로 객체 만들기
- 28. OCaml에서 객체 내의 객체
- 29. Ocaml에서 중첩 패턴 매칭
- 30. OCaml에서 유형 오류가 발생했습니다.
그것은 OCaml의의 아킬레스 피트이었다. 그 대답은 아마도 * Core * 또는 * Batteries *를 사용하는지에 달려 있습니다. – lukstafi