关于函数参数传递的问题


#1
# code
function calcuentropy(m::Array{Real})
    res = 0.0
    for e in m
        res += -e*log2(e) 
    end
    return res
end

自己写一个求熵函数,但是发现一运行就报错
image
百般测试发现,如果在交互窗口写循环直接用x就不会出错
image
所以这是不是参数传递的问题?
就算是引用传递不应该使用的时候就解引用了么?
心塞塞,有没有大佬给解答一下,谢谢啦


#2
# code
function calcuentropy(m)
    res = 0.0
    for e in m
        res += -e*log2(e) 
    end
    return res
end

试试这样可以不


#3

NaN,有可能是类型问题


#4

其实原因在于,它调用到你定义的另一个函数去了。这个函数的参数正确的写法应该是 m::Array{<:Real}


#5

可以看帮助上的UnionAll类型
TIM%E5%9B%BE%E7%89%8720190428104524

另外如果这里是矩阵应该可写成AbstractArray{<:Real, 2} 或者AbstractMatrix{<:Real}


#7

那个计算确实有点问题,谢谢啦


#8

谢谢啦,类型果然是不太会用啊


#9

哦~我看过手册了但是没理解,谢谢了


#10

原来是这样,谢谢啦