openlang

F#에서 문자열 서식 지정하기

처음으로 F# 라이브러리를 만들고 있어요

string.Format를 사용하면 그런 함수가 없다는 오류가 나와요.

제가 잘못한 걸까요, 아니면 원래 없는 기능인가요?

영어에서 번역원문 보기

이어지는 대화 2

서로의 근거를 따라
  1. 고유 링크

    전체 이름을 매번 쓰기 싫다면 F#에서 open을 쓸 수 있습니다:

    open System
    let greeting = String.Format("Hello {0}", "world")

    이건 일반 컴파일 애플리케이션과 F# interactive 모두에서 됩니다(open 선언을 먼저 입력하세요). 여기서 중요한 건 String을 대문자 S로 쓰는 것입니다. C#의 string은 일반적인 타입 이름이 아니라 System.String을 가리키는 키워드이기 때문입니다.

    다른 선택지로 sprintf도 살펴보세요. 이건 String.Format에 대응하는 F# 전용 함수로, 타입 검사를 해 준다는 등의 장점이 있습니다:

    let greeting = sprintf "Hello %s! Number is %d" "world" 56

    컴파일러가 인수(string과 int)가 서식 표시에 맞는지 검사합니다(%s는 문자열, %d는 정수입니다). 부분 함수 적용을 할 때도 이 함수가 더 자연스럽습니다:

    let values = [ 3 .. 12 ]
    let descriptions = values |> List.map (sprintf "number %d")

    그러면 "number 3", "number 4" 등이 담긴 문자열 목록이 나옵니다... String.Format으로 똑같이 하려면 람다 함수를 직접 작성해야 합니다.

    영어에서 번역원문 보기

같은 질문의 다른 갈래

  1. String.Format을 호출할 때 퍼센트 문자는 어떻게 이스케이프하나요?

    strings.xml 파일에 SQL 쿼리를 저장해 두고, 코드에서 String.Format으로 최종 문자열을 만들려고 해요. SELECT 쿼리에는 이런 like 절이 들어 있어요: 서식을 적용하려고 'pattern'을 %1$…

    답글 3최근 활동 java
  2. 도수 기호(°)가 있는 메시지에서만 NAK가 와요 (serial, Emacs)

    기본적으로 Temp: 23C는 ACK를 받는데 Temp: 23°C는 NAK를 받고, 보드에는 아무것도 안 떠요. 로그 줄은 rx: "\25"예요. baud를 4800으로 낮추고, :flowcontrol hw로 바꾸고, 다시…

    답글 1최근 활동 emacs-lisp
  3. C++처럼 바이트 단위로 자르다가 만난 Rust panic

    오래된 C++ 코드를 Rust로 옮기고 있는데, std::string을 바이트 한도에 맞춰 s.substr(0, n)으로 자르는 부분이 있어요. 한 줄이면 될 줄 알았죠. C++에서는 그럭저럭 돌아갔어요. std::strin…

    답글 4최근 활동 rustcpp