- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Julia中的==
和===
比较运算符有什么区别?
最佳答案
@ChrisRackauckas的答案就目前而言是准确的-即对于可变对象。但是,这个问题还有很多,所以在这里我将详细说明。===
运算符(is
函数的别名)实现Henry Baker的EGAL谓词[1,2]:当两个对象在程序上无法区分时,x === y
为true –即,您无法编写演示任何内容的代码。 x
和y
之间的差异。这归结为以下规则:
对于可变值(数组,可变复合类型),===
检查对象身份:如果x === y
和x
是同一对象,并且存储在内存中的同一位置,则y
为true。
对于不可变的复合类型,如果x === y
和x
具有相同的类型(因此具有相同的结构)且其对应的组件都是递归地y
,则===
为true。
对于位类型(不可更改的数据块,如Int
或Float64
),如果x === y
和x
包含完全相同的位,则y
为true。
这些规则(递归应用)定义了===
的行为。
另一方面,==
函数是用户可定义的,并且实现了“抽象值相等”。超载能力是一个主要区别:===
不可重载-它是具有固定的预定义行为的内置函数。您不能扩展或更改其行为。==
是可重载的-它是具有infix语法的常规(对于Julia)通用函数。它具有后备定义,可以为用户定义的类型提供有用的默认行为,但是您可以通过为类型添加新的更具体的方法到==
来更改它的显示状态。
要提供有关==
对于内置类型的行为以及当人们扩展它时对于用户定义类型的行为的更多详细信息,请参见the docs:
例如,所有数字类型均按数字值进行比较,而忽略
类型。将字符串作为字符序列进行比较,忽略
编码。
您可以将其视为“直觉平等”。如果两个数字在数值上相等,则它们为==
:
julia> 1 == 1.0 == 1 + 0im == 1.0 + 0.0im == 1//1
true
julia> 0.5 == 1/2 == 1//2
true
==
实现精确的数值相等:
julia> 2/3 == 2//3
false
2/3
是浮点值
0.6666666666666666
,它是最接近
Float64
的数学值2/3(对于有理数,用
2//3
表示为Julia表示),但是
0.6666666666666666
==
和
0.0
):它们是
-0.0
,即使它们的行为不同,因此也不是
==
。
===
)值:它们本身,彼此或任何其他值都不是
NaN
;它们各自是
==
自身,但彼此不是
===
,因为它们具有不同的位。
julia> 0.0 === -0.0
false
julia> 0.0 == -0.0
true
julia> 1/0.0
Inf
julia> 1/-0.0
-Inf
julia> NaN === NaN
true
julia> NaN === -NaN
false
julia> -NaN === -NaN
true
julia> NaN == NaN
false
julia> NaN == -NaN
false
julia> NaN == 1.0
false
!==
的文档还指出:
==
来实现
==
。
==
给出的值相等的概念递归地扩展到集合:
julia> [1, 2, 3] == [1, 2, 3]
true
julia> [1, 2, 3] == [1.0, 2.0, 3.0]
true
julia> [1, 2, 3] == Any[1//1, 2.0, 3 + 0im]
true
==
比较的缺点:
julia> a = [1, NaN, 3]
3-element Array{Float64,1}:
1.0
NaN
3.0
julia> a == a
false
==
比较总是测试对象的身份,因此,即使两个数组具有相同的类型并包含相同的值,它们也只有在相同的数组时才相等:
julia> b = copy(a)
3-element Array{Float64,1}:
1.0
NaN
3.0
julia> a === a
true
julia> a === b
false
julia> b === b
true
===
和
a
不是
b
的原因是,即使它们当前恰好在此处包含相同的数据,由于它们是可变的并且不是相同的对象,因此您可以对其中之一进行突变,然后它将变为显然它们是不同的:
julia> a[1] = -1
-1
julia> a # different than before
3-element Array{Int64,1}:
-1
2
3
julia> b # still the same as before
3-element Array{Int64,1}:
1
2
3
===
和
a
是不同的对象。相同的逻辑不适用于不可变的对象:如果它们包含相同的数据,则只要它们具有相同的值,它们就无法区分。因此,不可变值不受绑定到特定位置的约束,这是编译器能够如此有效地优化不可变值使用的原因之一。
关于julia - Julia中“==”和“===”比较运算符有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38601141/
使用 julia 控制台时,您输入如下内容: [10,20]*[1:100,1:100]' 你会得到这样的输出: 2x200 Array{Int64,2}: 10 20 30 40 50
Julia Computing 提供的 Julia 和 Julia Pro 有什么区别? Julia Pro 是否有任何在 Julia 中不可用的企业库? 最佳答案 正如您在 project desc
我最近将我的一个模拟移植到 Julia 中,我仅在运行时发现了几个类型错误。我希望静态分析我的 Julia 代码。 MATLAB 也有类似的问题,只在运行时发现很多错误。 我发现的唯一工具 ( Typ
是否有一种简单的方法来监控 julia 和所有 julia 包的提交和开发?我知道 https://github.com/JuliaLang/julia/commits/master 最佳答案 如果您
我正在从 R 迁移,我使用 head() function很多。我在 Julia 中找不到类似的方法,所以我为 Julia Arrays 写了一个。我还将其他几个 R 函数移植到 Julia。 我需要
在某些语言(如 Python)中,有函数装饰器,它们看起来像宏,位于函数定义之上。装饰器为函数本身提供了一些额外的功能。 Julia 是否以任何方式支持函数装饰器的想法?是否可以使用宏来实现相同的目标
我用Julia中的pmap()函数写了一段并行代码。 然后我在集群上保护了四个核心并运行了一个脚本: julia -p 12 my_parallel_program.jl 我现在应该取消我的工作吗?现
谁能帮我理解接下来的事情: 1)为什么我们需要在制作链表的同时制作一个 future 结构的新抽象类? 2) 为什么有参数 T? 3)这个操作符是干什么的 struct BrokenList
我在 Julia 中有一个数组 Z,它表示二维高斯函数的图像。 IE。 Z[i,j] 是像素 i,j 处的高斯高度。我想确定高斯的参数(均值和协方差),大概是通过某种曲线拟合。 我研究了各种拟合 Z
假设,我们有如下数据结构 struct MyStruct{T} t :: Union{Nothing, T} end 并且我们希望允许用户在不添加任何数据的情况下初始化结构,例如 MyStru
我有一个包含相同类型字段的结构,我无法在创建时分配该字段。 Julia 似乎不喜欢以下内容。 (它吐出一个循环引用投诉。)我打算将问题归结为它的本质 mutable struct Test t
我正在尝试使用最大似然估计 Julia 中的正态线性模型。根据 Optim 文档中关于不更改的值,我使用以下代码通过拦截和匿名函数来模拟该过程: using Optim nobs = 500 nvar
有没有办法从命令行更新 Julia?我浏览了 documentation ,但我找不到任何东西。 最佳答案 我建议尝试 asdf如果您使用的是 MacOS、Linux 或 Linux 的 Window
我想对维度为 n 乘以 n 的矩阵 A 中的所有元素求和。该矩阵是对称的并且对角线上有 0。我发现最快的方法就是求和(A)。然而,这似乎很浪费,因为它没有使用我只需要计算矩阵的下三角这一事实。但是,s
假设你有一个向量元组 $a$,我想在 julia 中定义一个函数 p(x)=x^a。 例如,如果 a=(1,2,3),则结果函数将为 x^1 *y^2 * z^3。 我想为任何元组提供一个通用方法,但
例如,我希望能够按照以下方式做一些事情: abstract Tree abstract SupervisedModel type DecisionTree <: Tree, SupervisedMod
在 Julia 中构建复杂表达式时,是否可以使用列表推导式之类的东西? 例如,假设我有一些符号和类型,并想从它们构建一个类型。现在,我必须做类似的事情。 syms = [:a, :b, :c] typ
在 MATLAB 中,[N,edges,bin] = histcounts (___) 可以获得相应元素的 bin 索引。 Julia 有什么等价的功能吗?谢谢! 我已经尝试过 StatsBase.j
我有一个 Julia 脚本,它反复调用 C++ 程序来执行优化。 C++ 程序写入一个文本文件,然后我让 Julia 读取结果并决定下一步做什么。问题是偶尔(可能是 1000 多次)C++ 程序卡住(
我使用了一些需要特定版本的 Julia 包(即 ≥ v0.3 和 0.4 ≤)。我找不到编译 Julia 的方法来自特定版本的源代码(我正在使用 Linux )。有没有办法做到这一点,我不知道? Gi
我是一名优秀的程序员,十分优秀!