수색…


통사론

  • "[끈]"
  • '[유니 코드 스칼라 값]'
  • graphemes ([문자열])

매개 변수

매개 변수 세부
에 대한 sprint(f, xs...)
f 첫 번째 인수로 IO 객체를 사용하는 함수입니다.
xs f 에 전달할 0 개 이상의 나머지 인수.

안녕, 세상!

줄리아의 문자열은 " 기호 :

julia> mystring = "Hello, World!"
"Hello, World!"

다른 언어와 달리 ' 기호 대신 사용할 수 없습니다 . '문자 리터럴을 정의합니다. 이것은 Char 데이터 유형이며 단일 유니 코드 스칼라 값만 저장 합니다 .

julia> 'c'
'c'

julia> 'character'
ERROR: syntax: invalid character literal

하나의 문자열에서 unicode 스칼라 값을 for 루프 로 반복하여 추출 할 수 있습니다.

julia> for c in "Hello, World!"
           println(c)
       end
H
e
l
l
o
,
 
W
o
r
l
d
!

Graphemes

Julia의 Char 유형은 유니 코드 스칼라 값 을 나타내며 경우에 따라서는 인간이 "문자"로 인식하는 것과 일치합니다. 예를 들어, résumé에서와 같이 문자 é의 한 표현은 실제로 두 개의 유니 코드 스칼라 값의 조합입니다.

julia> collect("é")
2-element Array{Char,1}:
 'e'
 '́'

이러한 코드 포인트에 대한 유니 코드 설명은 "라틴 소문자 E"및 "급행 동의 포함"입니다. 함께, 그들은 하나의 "인간"문자를 정의하는데, 이것은 유니 코드 용어로 ' 글자 '라고 불린다. 보다 구체적으로, 유니 코드 부록 # 29는 다음과 같은 이유 때문에 grapheme 클러스터 의 정의를 유도합니다.

사용자가 "문자"(언어 작성 시스템의 기본 단위)라고 생각하는 것은 단일 Unicode 코드 포인트가 아닐 수도 있습니다. 대신, 기본 단위는 여러 유니 코드 코드 포인트로 구성 될 수 있습니다. 문자라는 용어를 사용하는 컴퓨터의 모호성을 피하기 위해이를 사용자가인지 한 문자라고합니다. 예를 들어, "G"+ acute-accent는 사용자가 인식하는 문자입니다. 사용자는이를 단일 문자로 생각하지만 실제로는 두 개의 유니 코드 코드 포인트로 표현됩니다. 이러한 사용자 인식 문자는 프로그래밍 방식으로 결정될 수있는 grapheme 클러스터로 근사됩니다.

Julia는 문자열의 grapheme 클러스터를 반복하는 graphemes 함수를 제공합니다.

julia> for c in graphemes("résumé")
           println(c)
       end
r
é
s
u
m
é

유니 코드 스칼라 값을 반복 할 때보 다 각 행의 각 문자를 출력하는 것이 더 낫습니다.

julia> for c in "résumé"
           println(c)
       end
r
e

s
u
m
e

일반적으로 사용자가 인식하는 문자로 작업 할 때 유니 코드 스칼라 값보다 grapheme 클러스터를 다루는 것이 더 유용합니다. 예를 들어, 한 단어의 길이를 계산하는 함수를 작성한다고 가정합니다. 순진한 해결책은 사용하는 것입니다.

julia> wordlength(word) = length(word)
wordlength (generic function with 1 method)

단어에 하나 이상의 코드 포인트로 구성된 grapheme 클러스터가 포함되어 있으면 그 결과는 반 직관적입니다.

julia> wordlength("résumé")
8

graphemes 함수를 사용하여보다 정확한 정의를 사용할 때 예상되는 결과를 얻을 수 있습니다.

julia> wordlength(word) = length(graphemes(word))
wordlength (generic function with 1 method)

julia> wordlength("résumé")
6

숫자 유형을 문자열로 변환

Julia에서 숫자 형식을 문자열로 변환하는 데는 여러 가지 방법이 있습니다.

julia> a = 123
123

julia> string(a)
"123"

julia> println(a)
123

string() 함수는 더 많은 인수를 취할 수도 있습니다.

julia> string(a, "b")
"123b"

$ )를 사용해 캐릭터 라인에 정수 (및 특정의 다른 형태)를 삽입 할 수도 있습니다 (일명 보간합니다).

julia> MyString = "my integer is $a"
"my integer is 123"

성능 팁 : 위의 방법은 때로는 매우 편리 할 수 ​​있습니다. 그러나 많은 작업을 수행하고 많은 작업을 수행하고 코드 실행 속도가 걱정된다면 Julia 성능 가이드 에서는이 방법 대신 다음 방법을 사용하는 것이 좋습니다.

print()println() 여러 인수를 제공 할 수 있습니다.이 인수는 string() 이 여러 인수에서 작동하기 때문에 정확하게 작동합니다.

julia> println(a, "b")
123b

또는 파일에 쓸 때 마찬가지로 사용할 수 있습니다.

open("/path/to/MyFile.txt", "w") do file
    println(file, a, "b", 13)
end

또는

file = open("/path/to/MyFile.txt", "a")
println(file, a, "b", 13)
close(file)

이것은 주어진 조각들로부터 먼저 문자열을 만들어서 (콘솔 디스플레이 나 파일에) 출력하고 대신에 여러 조각들을 순차적으로 출력 할 필요가 없기 때문에 빠릅니다.

크레디트 : SO를 기반으로 한 질문 질문 줄리아에서 Int를 String으로 변환하는 가장 좋은 방법은 무엇입니까? Michael Ohlrogge의 답변과 Fengyang Wang의 의견

문자열 보간 (변수에 의해 문자열에 정의 된 값 삽입)

줄리아 (Julia)에서는 다른 언어들처럼 변수로 정의 된 값을 문자열에 삽입하여 보간하는 것이 가능합니다. 간단한 예를 들면 다음과 같습니다.

n = 2
julia> MyString = "there are $n ducks"
"there are 2 ducks"

숫자 이외의 다른 유형을 사용할 수 있습니다.

Result = false
julia> println("test results is $Result")
test results is false

주어진 문자열 내에 여러 보간을 가질 수 있습니다 :

MySubStr = "a32"
MyNum = 123.31
println("$MySubStr  ,   $MyNum")

성능 팁 보간은 매우 편리합니다. 그러나, 당신이 여러 번 그것을 매우 빠르게 수행하려고한다면, 그것은 가장 효율적이지 않습니다. 대신 성능이 문제가 될 때 추천을 위해 숫자 유형을 문자열변환을 참조하십시오.

sprint를 사용하여 IO 함수로 문자열 만들기

문자열은 sprint 기능을 사용하여 IO 개체와 작동하는 함수에서 만들 수 있습니다. 예를 들어, code_llvm 함수는 첫 번째 인수로 IO 객체를 허용합니다. 일반적으로 다음과 같이 사용됩니다.

julia> code_llvm(STDOUT, *, (Int, Int))

define i64 @"jlsys_*_46115"(i64, i64) #0 {
top:
  %2 = mul i64 %1, %0
  ret i64 %2
}

대신 출력을 문자열로 사용한다고 가정 해보십시오. 그러면 우리는 간단히 할 수 있습니다.

julia> sprint(code_llvm, *, (Int, Int))
"\ndefine i64 @\"jlsys_*_46115\"(i64, i64) #0 {\ntop:\n  %2 = mul i64 %1, %0\n  ret i64 %2\n}\n"

julia> println(ans)

define i64 @"jlsys_*_46115"(i64, i64) #0 {
top:
  %2 = mul i64 %1, %0
  ret i64 %2
}

code_llvm 과 같은 "대화식"함수의 결과를 문자열로 변환하면 생성 된 코드가 회귀할지 여부를 테스트 하는 것과 같은 자동화 된 분석에 유용 할 수 있습니다.

sprint 함수는 IO 객체에서 작동하는 함수를 첫 번째 인수로 취하는 상위 함수입니다. 뒤에서는 RAM에 IOBuffer 를 만들고 지정된 함수를 호출하고 버퍼에서 String 객체로 데이터를 가져옵니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow