JSON - Denominazione chiavi oggetti ruby [chiusa]

0

L'oggetto ruby ha metodo / proprietà:

def tentakles_count
  8
end

L'oggetto JavaScript ha chiave / proprietà:

{ justEnough: true }

Ora, quando JavaScript ottiene l'oggetto ruby serializzato tramite XHR o WebSocket, lo sviluppatore deve utilizzare la convenzione di denominazione degli stranieri per accedere a tentacles_count .

Lo stesso vale per Ruby, quando ottiene POSTed oggetto json, lo sviluppatore deve usare la convenzione di denominazione degli stranieri per accedere a justEnough .

Cosa faresti per affrontare questa piccola imperfezione senza diventare troppo pazzo?

    
posta Anri 07.04.2014 - 22:28
fonte

1 risposta

1

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.

    
risposta data 08.04.2014 - 00:26
fonte

Leggi altre domande sui tag