gpt4 book ai didi

hash - Julia:不可变的复合类型

转载 作者:行者123 更新时间:2023-12-04 12:19:25 24 4
gpt4 key购买 nike

我对 Julia 仍然完全陌生,并且对以下行为非常恼火:

immutable X
x::ASCIIString
end

"Foo" == "Foo"
true
X("Foo") == X("Foo")
false

但用 Int 而不是 ASCIIString
immutable Y
y::Int
end

3 == 3
true
Y(3) == Y(3)
true

我期待 X("Foo") == X("Foo")是真实的。谁能澄清为什么不是?

谢谢你。

最佳答案

Julia 有两种类型的相等比较:

  • 如果你想检查 x 和 y 是相同的,因为没有程序可以区分它们。 那么正确的选择是使用is(x,y)函数,进行此类比较的等效运算符是 ===运算符(operator)。棘手的部分是如果两个可变对象的内存地址相同,则它们是相等的,但是当您比较两个不可变对象(immutable对象)时 is如果内容在位级别相同,则返回 true。
  • 2 === 2 #=> true, because numbers are immutable "Foo" === "Foo" #=> false
  • ==运算符或等效的 isequal(x,y)如果首先存在适合此类参数的方法,然后该方法返回true,则称为泛型比较并返回true的函数。那么如果没有列出该方法怎么办?然后 ==调用===运算符(operator)。

  • 现在对于上述情况,您有一个不可变类型,它没有 ==运营商,所以你真的调用 ===运算符,它检查两个对象在位级别的内容是否相同,而不是因为它们引用不同的字符串对象和 "Foo" !== "Foo"
  • Check source Base.operators.jl .
  • Read documentation

  • 编辑:

    正如@Andrew 提到的,请参阅 Julia 文档,字符串是不可变的数据类型,所以为什么 "test"!=="true" #=> true ?如果您查看 String 数据类型的结构,例如 xdump("test") #=> ASCIIString data: Array(UInt8,(4,)) UInt8[0x74,0x65,0x73,0x74] ,您会发现字符串是具有重要 data 的复合数据类型。 field 。 Julia 字符串主要是存储在 data 中的字节序列。 String 类型的字段。和 isimmutable("test".data) #=> false

    关于hash - Julia:不可变的复合类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33070366/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com