我在朱莉娅很新,所以也许这是一个愚蠢的问题。我有以下代码:
a = [1.0, 2.0];
b = [2.2, 3.1];
Int(a.>b)
它给了我一个错误:
MethodError: Cannot `convert` an object of type BitArray{1} to an object of type Int64
This may have arisen from a call to the constructor Int64(...),
since type constructors fall back to convert methods.
Stacktrace:
[1] Int64(::BitArray{1}) at ./sysimg.jl:77
[2] include_string(::String, ::String) at ./loading.jl:522
命令1(a.>b)
效果很好。
你能解释一下我:
为什么我的隐式转换不起作用?
答案 0 :(得分:6)
a.>b
的类型为BitArray{1}
。使用Int(a.>b)
,您尝试将数组(即BitArray
)转换为单个整数,这是没有意义的。
相反,您可能希望将数组的元素转换为整数:
julia> a = [1.0, 2.0];
julia> b = [2.2, 3.1];
julia> Int.(a.>b)
2-element Array{Int64,1}:
0
0
请注意Int.(a.>b)
中broadcasts转换为每个元素的点。
1(a.>b)
之所以有效,是因为它被翻译为1*(a.>b)
。这是数字和数组的乘法,这是一个逐元素的操作。