Il tipo option può contenere un valore o può essere vuoto.
Nell'esempio seguente, MaybeANumber è un intero ?int opzionale che non contiene alcun valore. Il nuovo valore di MaybeANumber viene quindi impostato su 42.
var MaybeANumber : ?int = false # valore opzionale non impostato
set MaybeANumber := option{42} # assegnazione del valore 42
|
Creazione di un'opzione: puoi inizializzare un'opzione con quanto segue:
Specifica il tipo aggiungendo |
|
Accesso a un elemento di un'opzione: utilizza l'operatore query ? con l'opzione, ad esempio MaybeANumber?. L'accesso al valore memorizzato in un'opzione è un'espressione fallibile perché potrebbe non esserci un valore nell'opzione, e quindi deve essere utilizzata in un contesto di errore. |
Di seguito è riportato un esempio di utilizzo di un tipo di opzione per salvare un riferimento a un giocatore generato e, quando viene generato un giocatore, far reagire il dispositivo di attivazione:
my_device := class<concrete>(creative_device):
var SavedPlayer : ?player = false # valore opzionale non impostato
@editable
PlayerSpawn : player_spawner_device = player_spawner_device{}
@editable
Trigger : trigger_device = trigger_device{}
OnBegin<override>() : void =
PlayerSpawn.PlayerSpawnedEvent.Subscribe(OnPlayerSpawned)
OnPlayerSpawned(Player : player) : void =
set SavedPlayer = option{Player}
if (TriggerPlayer := SavedPlayer?):
Trigger.Trigger(TriggerPlayer)
Tipo persistente
Un'opzione è persistente se il suo valore è persistente, il che significa che è possibile utilizzarla nelle variabili weak_map con ambito modulo e fare in modo che i relativi valori vengano mantenuti tra le sessioni di gioco. Per maggiori dettagli sulla persistenza in Verse, consulta Utilizzo dei dati persistenti in Verse.