Scope

Um escopo é como um dicionário com entradas dentro, onde as chaves possuem valores.

Definição

Escopos são definidos com chaves {}, como no exemplo a seguir:

meuEscopoBacana = {
  lugar = 'aqui'
  quando = 'agora'
}

Escopos armazenam entradas em ordem alfabética. Isso se torna evidente quando você mapeia um escopo.

Acesso

Existem três maneiras de acessar diretamente as entradas dentro de um escopo.

Sintaxe de ponto

meuEscopoBacana.lugar  # retorna: 'aqui'

Sintaxe de obtenção

# assumindo que prop = 'lugar'
meuEscopoBacana(prop)  # retorna: 'aqui'

De qualquer maneira, se a propriedade não estiver presente, null será retornado. E se o escopo externo não for encontrado no escopo, um erro será gerado.

Sintaxe de encadeamento opcional

Você pode encadear o escopo externo ausente usando o operador interrogação-ponto ?.:

naoExistente?.propriedade  # null

O encadeamento opcional não gera um erro quando o escopo externo é null.

Operações

  • == igual
  • != diferente
  • + adição (efeito de mesclagem)
  • - subtração (efeito de diferença)
  • & AND lógico
  • | OR lógico

logical AND/OR evaluate empty scopes as false, otherwise true

AND/OR lógicos avaliam escopos vazios como false, caso contrário true

Adição de escopo (mesclagem)

O segundo operando funciona como se fosse um patch para o primeiro operando:

x = { a = 1, b = 3 }
y = { b = 2 }

x + y  # { a = 1, b = 2 }
y + x  # { a = 1, b = 3 }

valores do segundo operando substituem valores do primeiro operando

Subtração de escopo (diferença)

A operação de subtração, gera a remoção dos elementos do segundo operando que também estão presentes no primeiro operando:

x = { a = 1, b = 3 }
y = { a = 1 }

x - y  # { b = 3 }

apenas valores exatamente idênticos são removidos

Veja também

results matching ""

    No results matching ""