/ Definovanie štruktúry počas inicializácie - rubín

Definovanie štruktúry počas inicializácie - rubín

Mám triedu, ktorá číta dynamický súbor CSV a chcel by som vytvoriť štruktúru založenú na hlavičkách CSV.

V pseudokóde to vyzerá takto:

class SomeClass
def initialize(csvfile)
@csv = CSV.open(csvfile, options.....)
.....
headers = @csv.headers  # => [:line, :error, :user, ........]   <==this is dynamic
RECORD = Struct.new(headers)
load_data
end

def load_data
@records = []
@csv.each do |r|
@records << RECORD.new(r.fields)
end
end
end

Problém je v tom, že konštanta nemôže byť (nemala by) dynamicky definovaná. Aký by mal byť správny spôsob riešenia tohto problému?

odpovede:

2 pre odpoveď č. 1

Nemusíte používať konštantu. Použite premennú inštancie.

class SomeClass
def initialize(csvfile)
@csv = CSV.open(csvfile, options...)
...
headers = @csv.headers
@record = Struct.new(headers)
load_data
end
def load_data
@records = []
@csv.each do |r|
@records << @record.new(r.fields)
end
end
end

0 pre odpoveď č. 2

@sawa "s odpoveď je správna. Tu pridám niečo viac.

konštanty sa používajú na ukladanie hodnôt, ktoré sa nemenia. Ak vo svojom programe zmeníte konštantu, pravdepodobne to bude ploštice, Ruby sa snaží byť nápomocný a povedať: „Vydrž! Myslím, že sa tu deje niečo divné. Povedal si, že chceš, aby to bolo konštantné, ale teraz sa to mení!“

V Ruby nemáte nikdy povolené zadávať neustále úlohy, v rámci definícií metód z dôvodu, ako som práve povedal vyššie. Ak sa o to pokúsite neustále priradenie vnútri metódy dostanete Chyba syntaxe, Podľa potreby môžete vo vnútri metódy použiť akékoľvek premenné, ale nie konštantné premenné.

Ak urobíš

Y = 1
#then
Y = 2
# warning: already initialized constant Y
# warning: previous definition of Y was here

Ale ak sa pokúsite,

def meth arg
C = arg
end
# then
# SyntaxError: dynamic constant assignment
# C = arg
#   ^