Mi sono appena presentato allo splat di Ruby. E ho giocato con lui in molti modi. ma l'esperimento di seguito in qualche modo mi ha fatto pensarci due volte :)Cosa significa sia gli operatori * che (*) in ruby?
langs = ["java", "csharp", "ruby", "haskell" ]
# => ["java", "csharp", "ruby", "haskell"]
l1,*,l2 = *langs
# => ["java", "csharp", "ruby", "haskell"]
l1
# => "java"
l2
# => "haskell"
l1,*,*,l2 = *langs
SyntaxError: (irb):27: syntax error, unexpected tSTAR
l1,*,*,l2 = *langs
^
from /usr/bin/irb:12:in `<main>'
Sì, l'errore è evidente, come ho usato più di 1 *(splat)
operatori nella stessa lista degli argomenti.
Ora ho provato a giocare con esso.
l1,(*),(*),l2 = *langs
# => ["java", "csharp", "ruby", "haskell"]
Ahh! qui funziona. Ma non riuscivo a capire perché?
l1
# => "java"
l2
# => "haskell"
l1,(*),l2 = *langs
# => ["java", "csharp", "ruby", "haskell"]
l1
# => "java"
l2
# => "ruby"
Dall'esempio precedente sembra che stia saltando gli elementi dell'array.
Le domande sono:
(a) quello che l'operatore (*) si chiama?
(b) quando ho usato in splat (*) nella riga
l1,*,l2 = *langs
consuma tutti gli elementi -"csharp", "ruby"
. C'è un modo per vedere cosa consuma tecnicamente lo*
? Ovviamente sto chiamando con l'uso sel1,*,l2 = *langs
non dal1,l*,l2 = *langs
.
Una domanda molto ben fatta. Non so nulla di rubino, ma in superficie sembra essere in qualche modo un accessorio di tipo "jolly", se questo ha senso. Presumo che consuma più elementi possibile prima che il prossimo token venga analizzato. –
@ RichardJ.RossIII Grazie per mostrare il vostro interesse. Sono a conoscenza di '*' ma non di (*). :) –
Qualcuno potrebbe suggerirmi quando tutte le risposte sono ** OK **, allora cosa fare? come non posso accettare più di uno. –