Я пытаюсь создать структуру ТКС:
а)
struct txn
txn_id::Int64
bank::Char[20]
branch::Char[20]
teller::Char[20]
customer::Char[20]
account::Char[34]
timestamp::DateTime
dr_cr::Char[2]
amount::Int64
end
дает
Error: TypeError: in txn, in type definition, expected Type, got Array{Char, 1}
б)
struct txn
txn_id::Int64
bank::Char(20)
branch::Char(20)
teller::Char(20)
customer::Char(20)
account::Char(34)
timestamp::DateTime
dr_cr::Char(2)
amount::Int64
end
дает
Error: TypeError: in txn, in type definition, expected Type, got Char
Как я могу создать структуру в Джулии?
В Джулии массив Char
s не эквивалентен String
. Синтаксис Char(80)
создает один символ:
julia> Char(80)
'P': ASCII/Unicode U+0050 (category Lu: Letter, uppercase)
А синтаксис Char[80, 81, 82]
создает массив Char
s:
julia> Char[80, 81, 82]
3-element Array{Char,1}:
'P'
'Q'
'R'
Мы видим, что массив символов не эквивалентен строке (обратите внимание, что символы также могут быть представлены с помощью одинарных кавычек):
julia> ['a', 'b', 'c'] == "abc"
false
Попробуйте определить строковые поля в вашей структуре, используя тип String
:
julia> struct Person
name::String
end
julia> p = Person("Bob")
Person("Bob")
Попробуйте x = ['a', 'b', 'c']
и y = "abc"
и сравните Base.summarysize(x)
с Base.summarysize(y)
. Вы увидите, что массив символов на самом деле занимает больше памяти, чем строка.
В частности, это происходит потому, что char
s — это 4 байта (utf32), а string
s английских символов — 1 байт (utf8). Этот компромисс имеет смысл, но несколько неинтуитивен
Будет ли какое-либо влияние на память при использовании типа String в структуре?