Die Funktion join () gibt den Typ zurück, gefolgt von einer Hexadezimalzahl anstelle einer verketteten Zeichenfolge

7

Im Wesentlichen möchte ich ein Array erstellen und eine einzelne Zeichenfolge erstellen, deren Elemente durch eine neue Zeile getrennt sind.

Ich habe ein Array namens $zones . Die Ausgabe des Verweises auf $zones bestätigt, dass es sich um ein Array handelt.

Der folgende Code:

%Vor%

ergibt die folgende Ausgabe

%Vor%

Ich möchte dieses Array wirklich nicht manuell durchlaufen. Kann jemand erklären, warum die Funktion join() den Namen des Typs zusammen mit einer Hex-Zahl zurückgibt?

    
Fred 15.06.2013, 21:28
quelle

3 Antworten

10

Wie man das tut, wird von user1937198 gut erklärt, aber warum funktioniert es so?

Es ist einfach:

$zones ist kein Array. Es ist eine Array-Referenz.

join funktioniert in Listen. Also wenn du es tust:

%Vor%

Sie rufen im Wesentlichen join in einer Liste mit einzelnen Elementen auf. Und das Element ist eine Referenz, die zufällig an ARRAY(0x170cf0d8) anknüpft.

Damit es richtig funktioniert, muss es dereferenziert werden, und zwar durch Voranstellen eines echten Datentyps ( @ oder % oder in manchen Fällen $ ).

Dies kann so geschrieben werden: @$zones , oder (einige, einschließlich mir, sagen, dass es besser lesbar ist) als: @{ $zones } .

Dies ist wichtig, wenn Sie verschachtelte Strukturen haben, denn obwohl Sie ein einfaches Array als Variable haben können, handelt es sich bei verschachtelten Datenstrukturen immer um Referenzen.

    
user80168 15.06.2013, 21:36
quelle
6

Was Sie wollen, ist join("\n",@{$zones}))

    
user1937198 15.06.2013 21:30
quelle
5

$zones ist eine Array-Referenz und um Array-Werte zu verbinden, müssen Sie sie zuerst dereferenzieren, indem Sie skalar $zones mit @

voranstellen %Vor%

Für weitere Informationen gibt es ein kurzes Tutorial zu Referenzen: Ссылка

    
Сухой27 15.06.2013 21:35
quelle

Tags und Links