es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No es posible acceder a una variable declarada dentro de una función desde el cuerpo del condicional.

Estoy intentando acceder a una variable que declaré en la parte superior de la función desde dentro de una declaración “if” (también en esa misma función).
Este es el código que escribí:

function getAround(x: number, y: number): number {
  console.log({x, y});
  let around: number = 0;
  const max = (props.size - 1);
  console.log({around});
  // arriba
  if (y > 0 && grid[y - 1][x].bomb) {
    console.log({max: this.max});
    around++;
  }
  // arriba derecha
  if (y < 0 && x > max && grid[y - 1][x + 1].bomb) {
    around++;
  }
  // derecha
  if (x < max && grid[y][x + 1]) {
    around++;
  }
  // inferior derecha
  if (y < max && x < max && grid[y + 1][x + 1]) {
    around++;
  }
  // inferior
  if (y < max && grid[y + 1][x]) {
    around++;
  }
  // inferior izquierda
  if (y < max && x > 0 && grid[y + 1][x - 1]) {
    around++;
  }
  // izquierda
  if (x > 0 && grid[y][x - 1]) {
    around++;
  }
  // arriba izquierda
  if (y > 0 && x > 0 && grid[y - 1][x - 1]) {
    around++;
  }
  return around;
}

Por alguna razón, falla al intentar incrementar around, así que intenté crear una versión más simple:

function simple(x: number, y: number): number {
  let around: number = 0;
  if (x > y) {
    around++;
  }
  return around;
}

La versión simple funciona por alguna razón. Según entiendo, ambas deberían funcionar bien, ¿verdad?

Aquí está el error que obtengo:

Error while mounting app: TypeError: Cannot read properties of undefined (reading '1')
    at getAround (PlayingField.vue:89)
    at PlayingField.vue:50
    at Array.forEach (<anonymous>)
    at PlayingField.vue:50
    at Array.forEach (<anonymous>)
    at getAllAround (PlayingField.vue:49)
    at generateGrid (PlayingField.vue:41)
    at setup (PlayingField.vue:45)
    at callWithErrorHandling (runtime-core.esm-bundler.js:6708)
    at setupStatefulComponent (runtime-core.esm-bundler.js:6317)

La línea 89 contiene el siguiente código:

console.log({max: this.max});

No estoy seguro si esto es importante, pero estoy usando Nuxt 3 y el código está dentro de una etiqueta `

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error parece sugerir que el error proviene de la línea 89, la cual está intentando acceder a la propiedad this.max. Sin embargo, el fragmento de código proporcionado no muestra dónde se declara max ni a qué se refiere this.

    En cuanto al problema de acceder a la variable around dentro de las declaraciones if, el código parece estar correcto y debería funcionar correctamente. Es posible que el problema radique en que la variable grid no esté definida correctamente, o que haya algún comportamiento no deseado ocurriendo en otra parte del código.

    En cuanto a la versión más simple de la función, parece estar funcionando correctamente. Sin embargo, los operadores de comparación > y < deben ser reemplazados por > y < respectivamente en ambas funciones, ya que son entidades HTML y no funcionarán como se espera en el código de TypeScript.

    Sin más contexto e información sobre el código y el error, es difícil proporcionar una solución más específica al problema.

Comments are closed.