作者:回音爱Fred | 来源:互联网 | 2022-12-03 16:02
我是Julia语言的新手,在将子字符串与字符进行比较时会看到一些奇怪的行为.
我认为下面的第一个比较,至少应该评估true
.
有人可以告诉我如何比较这两个值,(奖金)指出我为什么这种违反直觉的结果是这样的?
julia> sq = "abcd"
julia> sq[1] == "a"
false
julia> isequal(sq[1],"a")
false
Bogumił Kami..
7
sq[1]
返回一个Char
.用sq[1:1]
得到String
.
您可以查看sq[1]
REPL中的返回值:
julia> sq[1]
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
所以你有了:
julia> sq[1] == 'a'
true
因为这样比较Char
对Char
.
另一方面,sq[1:1]
你有:
julia> sq[1:1]
"a"
julia> sq[1:1] == "a"
true
这种行为的原因是字符串被视为集合.同样,如果你有一个数组,x = [1,2,3]
你不要指望,x[1] == [1]
而是x[1] == 1
.
1> Bogumił Kami..:
sq[1]
返回一个Char
.用sq[1:1]
得到String
.
您可以查看sq[1]
REPL中的返回值:
julia> sq[1]
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
所以你有了:
julia> sq[1] == 'a'
true
因为这样比较Char
对Char
.
另一方面,sq[1:1]
你有:
julia> sq[1:1]
"a"
julia> sq[1:1] == "a"
true
这种行为的原因是字符串被视为集合.同样,如果你有一个数组,x = [1,2,3]
你不要指望,x[1] == [1]
而是x[1] == 1
.
朱莉娅的差异很大.创建一个新的`String`分配内存,而创建`Char`则不会,因此在热循环中会更快.