Como faço para criar um objeto que retorna valores diferentes em diferentes contextos escalares?

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu quero retornar um valor diferente em um contexto string e contexto numérico como $! faz. Eu sei que posso saber se estou na lista ou contexto escalar com wantarray, mas existe alguma maneira em puro Perl para determinar qual contexto escalar estou sentindo? Eu supor que há uma resposta em XS bem e eu estou disposto a tomar essa resposta se não há como fazê-lo em puro Perl.

Foi útil?

Solução

Confira o módulo Scalar::Util, especificamente a função 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 é parte da distribuição do núcleo, e deve estar em qualquer lugar disponível você tem Perl.

Outras dicas

Embora eu possa propor casos em que isso seria útil (numerais romanos talvez), você seria melhor criar um objeto com um inteiro e um atributo de cadeia. Use o atributo apropriado no contexto apropriado.

Isso lhe dá a flexibilidade de ser capaz de sobrecarregar as operações com 'sobrecarga de utilização'. Em um exemplo numerais romanos, dualvar funcionará até que você deseja adicionar 2 algarismos romanos juntos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top