Julia : 关于类型的匹配和规范建议

一、起因:match error

    比如,我们有一个函数,fun(data::Dic{AbstractString,Float64},Float64) , 但是,实际上,我们传进去的参数格式是Dict{ASCIIString,Float64}类型,就会报match error.

    事实上:

    我们知道:

    ASCIIString<:AbstractString   #  => true

    但是:

    Array{ASCIIString,1}<:Array{AbstractString,1} # =>false

    Dict{ASCIIString,Float64} <: Dict{AbstractString,Float64}   # => false

二、建议

    所以在写函数的格式和输入格式时,一定要注意签名格式的一致,否则容易报错,而且容易一下找不出问题所在。

    建议

(1) 数据入口:函数的参数的类型,尽量从宽

    如, 以下函数要适用AbstractString 的可能子集做KEY, 可以更加规范一下,增加适用性。

    #比如:  对weights

function indexmake{T<:AbstractString}(data::Dict{Dates.Date,Dict{AbstractString,Array{kBarData,1}}},weights::Dict{T,Float64})

         # content

        #

end

   (2) 数据出口:对于返回类型,尽量不要返回从宽的类型,

   如,

     fun getData(data:Float64)

          return Dict{ASCIIString,Float64}() ; # 尽量不要返回Dict{AbstractString,Float64} 类型,类型过宽。

     end

  另外,至于自定义类型的数据,可以从宽,问题不大.如果考虑速度,最好还是用具体类型而不是抽象类型。

  type data {T<:AbstractString}

       name:: T

  end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值