Julia Language
문자열
수색…
통사론
- "[끈]"
- '[유니 코드 스칼라 값]'
- 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
객체로 데이터를 가져옵니다.