arrays - una - search key in multidimensional array php
¿Por qué no funciona ||=con matrices? (2)
Esta página tiene una buena explicación, imho:
op = puede ocurrir entre dos expresiones cualquiera, no solo una var y una expresión, sino que la izquierda debe ser un lvalue en contexto escalar.
Dado que
@x ||= 42
es equivalente ascalar(@x) = @x || 42
scalar(@x) = @x || 42
, y no se le permite usarscalar(@x)
como un valor, se obtiene un error.
Utilizo el operador ||=
para proporcionar valores predeterminados para variables, como
$x ||= 1;
Intenté usar esta sintaxis con una matriz pero obtuve un error de sintaxis:
@array||= 1..3;
Can''t modify array dereference in logical or assignment (||=) ...
¿Qué significa y cómo debo proporcionar matrices con valores predeterminados?
Porque ||
Es un operador escalar. Si @array||= 1..3;
funcionó, evaluaría 1..3
en un contexto escalar, que no es lo que usted quiere. También está evaluando la matriz en contexto escalar (lo cual está bien, porque una matriz vacía en el contexto escalar es falsa), excepto que no se puede asignar a scalar(@array)
.
Para asignar un valor predeterminado, use:
@array = 1..3 unless @array;
Pero tenga en cuenta que no hay manera de distinguir la diferencia entre una matriz que nunca se ha inicializado y otra a la que se le ha asignado la lista vacía. No es como un escalar, donde puedes distinguir entre undef
y la cadena vacía (aunque ||=
no distingue entre ellos).
eugene y encontró este mensaje perl.perl5.porters (la lista de correo oficial de los desarrolladores de Perl) que contiene más detalles sobre esto.