Ruby e le sue librerie e gemme comunemente usate tendono a sfocare le linee tra method/property
e key/property
usando attr_accessor
, dando essenzialmente ad un oggetto sia una proprietà che metodi getter / setter in una riga. O esplicitamente o implicitamente, avresti
def tentacles_count
@tentacles_count
end
def tentacles_count=(n)
@tentacles_count = n
end
def to_json
# loop over all instance variables and convert them to json key-value pairs
end
(le variabili che iniziano con @
hanno scope di oggetto invece di scope del metodo).
Se non è possibile fare esattamente questo (diciamo che tentacles_count
ha bisogno di contare dinamicamente i tentacoli mentre sei in Ruby), to_json può essere definito in modo da includere metodi pubblici come chiavi e i loro valori di ritorno come valori.
Il rovescio della medaglia, un oggetto json analizza il più naturalmente in un oggetto di Ruby Hash (un dizionario). La sintassi per accedere agli hash è diversa dalla notazione del metodo ( obj['justEnough']
), ma ci sono diverse gemme di libreria che ti permetteranno di usare la convenzione familiare se lo desideri. Penso che lo schema migliore sia usare l'hash come argomento per un inizializzatore: ad esempio, OpenStruct .
Ovviamente non esiste una risposta generale a questa domanda: c'è, e dovrebbe esserci un diritto, imbarazzo nell'interfaccia tra i diversi linguaggi di alto livello. Puoi osservare queste piccole imperfezioni come promemoria per evitare un accoppiamento stretto o una logica duplicata tra i diversi sistemi.