Julia 1.0中字符比较违反直觉的子串

qbz*_*ker 3 julia

我是Julia语言的新手,在将子字符串与字符进行比较时会看到一些奇怪的行为.

我认为下面的第一个比较,至少应该评估true.

有人可以告诉我如何比较这两个值,(奖金)指出我为什么这种违反直觉的结果是这样的?

julia> sq = "abcd"

julia> sq[1] == "a"
false

julia> isequal(sq[1],"a")
false
Run Code Online (Sandbox Code Playgroud)

Bog*_*ski 7

sq[1]返回一个Char.用sq[1:1]得到String.

您可以查看sq[1]REPL中的返回值:

julia> sq[1]
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
Run Code Online (Sandbox Code Playgroud)

所以你有了:

julia> sq[1] == 'a'
true
Run Code Online (Sandbox Code Playgroud)

因为这样比较CharChar.

另一方面,sq[1:1]你有:

julia> sq[1:1]
"a"

julia> sq[1:1] == "a"
true
Run Code Online (Sandbox Code Playgroud)

这种行为的原因是字符串被视为集合.同样,如果你有一个数组,x = [1,2,3]你不要指望,x[1] == [1]而是x[1] == 1.

  • 朱莉娅的差异很大.创建一个新的`String`分配内存,而创建`Char`则不会,因此在热循环中会更快. (3认同)