Come faccio a creare un oggetto che restituisce valori diversi in contesti scalari diversi?

StackOverflow https://stackoverflow.com/questions/800436

  •  03-07-2019
  •  | 
  •  

Domanda

Voglio restituire un valore diverso nel contesto stringa e nel contesto numerico come $! . So di poter scoprire se mi trovo in un elenco o in un contesto scalare con wantarray, ma nel Perl puro esiste un modo per determinare in quale contesto scalare mi trovo? Presumo che ci sia una risposta anche in XS e sono disposto a prendere quella risposta se non c'è modo di farlo in puro Perl.

È stato utile?

Soluzione

Guarda il modulo Scalar :: Util , in particolare la funzione dualvar () :

use Scalar::Util qw(dualvar);

my $scalar = dualvar 10, "Hello";
my $twelve = $scalar + 2;          # $twelve = 12
my $greeting = $scalar . " world"; # $greeting = "Hello world"

Scalar :: Util fa parte della distribuzione principale e dovrebbe essere disponibile ovunque tu abbia Perl.

Altri suggerimenti

Mentre posso proporre casi in cui questo sarebbe utile (forse numeri romani), sarebbe meglio creare un oggetto con un numero intero e un attributo stringa. Utilizzare l'attributo appropriato nel contesto appropriato.

Questo ti dà la maggiore flessibilità di poter sovraccaricare le operazioni con 'usa sovraccarico'. In un esempio di numeri romani, dualvar funzionerà fino a quando non si desidera aggiungere 2 numeri romani insieme.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top