Come dovrei chiamare il processo di conversione di un oggetto in una stringa?

6

Su questo argomento stiamo svolgendo un gioco di "calcio semantico": sto scrivendo un metodo per un oggetto che rappresenterà l'oggetto come una stringa. Quella stringa dovrebbe essere tale che quando digitata (più probabilmente tagliata e incollata) nella finestra dell'interprete (terrò da parte il nome della lingua per ora), produrrà un oggetto che è, per i nostri scopi, identico a quello sopra che il metodo è stato chiamato. C'è una vivace discussione sul nome "migliore" per questo metodo.

Sono stati proposti i termini pickle , serialize , deflate , etc . Tuttavia, sembra che quei termini assumano un certo processo per il de-pickling (unserialization, etc ) che non è necessariamente l'interprete del linguaggio stesso. Cioè, non si riferiscono specificamente al caso in cui vengono prodotte stringhe di codice valido. Questo è più vicino a un quine , ma stiamo riproducendo l'oggetto non il codice, quindi non è corretto.

qualche suggerimento?

    
posta shabbychef 11.02.2011 - 19:42
fonte

11 risposte

5

In Python è la funzione "repr ()". Una rappresentazione di stringa dell'oggetto.

    
risposta data 11.02.2011 - 19:50
fonte
12

Se stavi scrivendo Perl, essenzialmente dovresti duplicare la funzionalità di Data::Dumper . Prende un oggetto Perl e lo trasforma in una rappresentazione di stringa che può quindi essere utilizzata per ricreare quell'oggetto (essenzialmente - questo non è proprio vero per gli oggetti benedetti). La descrizione di questo modulo dice che crea " stringified strutture dati perl".

Quindi il processo è stringification . È quello che ho sempre sentito chiamare.

    
risposta data 11.02.2011 - 21:08
fonte
3

Prenderò qualcosa seguendo queste linee:

  • toStringRep ()
  • createStringRepresention ()
  • strRep ()
  • toSource ()
  • toSourceString ()
risposta data 11.02.2011 - 19:48
fonte
3

Anche se vedo il tuo punto sulla serializzazione che suggerisce di deserializzare (o è "unserializing"?) essendo l'opposto, sarebbe comunque la mia formulazione preferita perché implica naturalmente che il processo restituisca un equivalente in stringa.

    
risposta data 11.02.2011 - 21:01
fonte
3

Ho nominato sourcification . Sono d'accordo che "quine" non è giusto, ma la parte in cui produci codice sorgente valido per l'oggetto sembra fondamentale.

    
risposta data 11.02.2011 - 19:52
fonte
1

Il nome del metodo dovrebbe dire cosa fa, non perché lo fa, quindi:

toString() perché è il modo in cui lo hai scritto nel titolo. Quello che viene fatto con la stringa in seguito (vale a dire se l'oggetto può essere ricreato da esso) non ha nulla a che fare con il metodo che crea la stringa, quindi non dovrebbe influenzare il nome del metodo.

Se vuoi anche avere un metodo toString() che crea una rappresentazione leggibile umana della stringa potresti rendere l'altro più specifico come stringify() da differenziare, ma lo farei solo se necessario.

    
risposta data 11.02.2011 - 21:01
fonte
1

Mi sembra che tu stia cercando di produrre non solo una stringa, di per sé, ma piuttosto un progetto dell'oggetto. Qualcosa che incapsula come si comporta e tutti i suoi attributi. Hai affermato che questa stringa dovrà essere analizzata dal tuo interprete di lingua, il che mi porta a capire che questi dati vengono memorizzati in una lingua a parte. La lingua che solo il tuo interprete di lingua può leggere e scrivere. Detto questo, come si chiama questa lingua?

Qualunque cosa tu decida che sia chiamata potrebbe quindi essere usata nel nome per chiarire cosa si sta facendo.

myLangRepresentingObject = LanguageInterpreter->convertObjectToMyLanguage( SomeObject );

Ad esempio, se la stringa memorizza gli oggetti utilizzando il linguaggio, XML, potresti usare qualcosa del tipo:

xmlRepresentingObject = XmlInterpreter->convertObjectToXml( SomeObject );
    
risposta data 11.02.2011 - 22:21
fonte
0

Mi piace l'idea pickle . Non dice assolutamente nulla, lasciando che la gente veda che si chiede WTF e che deve cercare documentazione e / o implementazione per capire cosa sta facendo il codice client ... tutto a causa di un nome di funzione completamente casuale.

Il ragazzo che era solito dirigere il team di sviluppo in cui lavoravo mi piaceva la serie di libri Master e Commander. Gli piaceva dare un nome alle cose dopo le barche menzionate in quei libri. Devo dire che non ho mai smesso di essere titillato dall'intelligenza carina che deve aver preso per usare quei nomi nel codice. Mi ha sempre fatto sorridere, ho fatto clic sul nome in VS e ho detto "Vai a Definizione" e ho aspettato i 20 minuti per stupisenso per bloccare il mio computer e infine per portarmi in qualche luogo casuale che non aveva nulla fare con il simbolo che stavo cercando.

    
risposta data 11.02.2011 - 20:29
fonte
0

Non stai fondamentalmente cercando una funzione Hash ()? Dove dovresti creare una rappresentazione di stringa di uno stato di oggetto reversibile (a differenza di un normale hash).

Modifica: abrogo l'idea di Hash (). Quanto a ToSnapshot () e FromSnapshot ()?

    
risposta data 11.02.2011 - 20:32
fonte
0

La codifica o decodifica sarebbe una terminologia più generale per un processo bidirezionale. Si può anche considerare la trasformazione per un processo a senso unico.

    
risposta data 12.02.2011 - 03:45
fonte
0

In Common Lisp questo è chiamato printer e reader .

Citando l'Hyperspec:

" scrivi, prin1, princ, print e pprint scrivono la rappresentazione stampata dell'oggetto sul flusso di output."

" leggi analizza la rappresentazione stampata di un oggetto da input-stream e crea tale oggetto."

    
risposta data 12.02.2011 - 10:06
fonte

Leggi altre domande sui tag