Julia: 关于SubString

来源:互联网 发布:mac mysql 图形化界面 编辑:程序博客网 时间:2024/04/25 05:11

    一般地,我们更多地是接触抽象类String,具体类ASCIIString,因为在julia中,具体类具有在运行上速度高人一等的特性,所以我一般喜欢用ASCIIString.

   但是,由于Julia在IO后,往往是通过SubString{ASCIIString}来返回结果的,

   比如:@time data =readcsv("E:\\CSV\\FutureData\\IF\\20150114\\IF01_20150114.csv" ) # 其实,CSV中第一列:是时间格式的字符串
             typeof(data[1,1]) 就是一个SubString{ASCIIString}类型。有时,我们并没有很在意,因为很多情况,它看起来和String功能相近。

   但是,如果你的函数的参数,只写了ASCIIString类型,比如,getDateTime(dt::ASCIIString),那么,此时调用data[1,1],这个时侯就会报错。

   所以,很有必要了解一下。因为,我们一般不会专门重载一个SubString{ASCIIString}的参数来加写一个函数。


julia> str ="abcdefghi"   # 创建一个ASCIIString
"abcdefghi"

julia> typeof(str)
ASCIIString (constructor with 2 methods)

julia> b=SubString(str,1,5) #  ASCIIString =>SubString{ASCIIString} 
"abcde"

julia> typeof(b)
SubString{ASCIIString} (constructor with 1 method)

julia> typeof(b)<:String # SubString{ASCIIString}和String是从属关系
true

julia> typeof(b)<:ASCIIString # SubString{ASCIIString}和ASCIIString是“兄弟”关系
false

julia> c=convert(String,b) # SubString{ASCIIString} =>  类型不会发生变化
"abcde"

julia> typeof(c)
SubString{ASCIIString} (constructor with 1 method)

julia> d=convert(ASCIIString,b) # SubString{ASCIIString} => ASCIIString 类型会发生变化
"abcde"

julia> typeof(d)
ASCIIString (constructor with 2 methods)

julia> @time bb=str[1:4]  #速度比较,预编译后,总体差不多
elapsed time: 1.4212e-5 seconds (200 bytes allocated)
"abcd"

julia> @time bb=str[1:4]
elapsed time: 9.475e-6 seconds (152 bytes allocated)
"abcd"

julia> @time cc=b[1:4]
elapsed time: 0.004762755 seconds (4504 bytes allocated)
"abcd"

julia> @time cc=b[1:4]
elapsed time: 9.475e-6 seconds (104 bytes allocated)
"abcd"

julia> @time cc=b[1:4] 
elapsed time: 8.29e-6 seconds (104 bytes allocated)
"abcd"

julia> string(str,cc) # 混合后 => ASCIIString
"abcdefghiabcd"

julia> typeof(string(str,cc))
ASCIIString (constructor with 2 methods)


0 0
原创粉丝点击