Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

148
Visualizações
Envolviendo los argumentos o el resultado de una función anónima

Quiero reasignar una función anónima para agregar a lo que hace. Básicamente estoy buscando la siguiente funcionalidad.

 let f1 = (x: number) => x + 100; // f1 = (x: number) => f1(x) + 20; // becomes recursive -> stack overflow, not what I want f1(3) // 123

Las dos opciones que veo son 1. envolver el argumento o 2. de alguna manera envolver el resultado. La primera opción parece más fácil pero no estoy seguro de cómo lograrlo (o si lo que estoy pidiendo es imposible).

Editar: Evidentemente, mi pregunta no fue lo suficientemente clara. He hecho un nuevo ejemplo.

https://tsplay.dev/mpv3Mw

 class Cat { eat() { const newCat = createFullCat(this); return newCat; } drink() { const newCat = createQuenchedCat(this); return newCat; } sleep() { const newCat = createRestedCat(this); return newCat; } } function makeCatActionChain(makeCatSleep: boolean, makeCatEat: boolean) { let f1 = (cat: Cat) => cat.drink(); if (makeCatEat) { f1 = (cat: Cat) => f1(cat).eat(); // Need different way to do this } if (makeCatSleep) { f1 = (cat: Cat) => f1(cat).sleep(); // Need different way to do this } return f1; }

Si es posible, me gustaría hacer esto sin crear otra variable.

about 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Primero, asignó un valor (una función) a f1 :

 let f1 = (x: number) => x + 100;

Luego, asignó un nuevo valor (otra función) a f1 :

 f1 = (x: number) => f1(x) + 20;

Cuando le asignó la nueva función, la función anterior ya no tenía ninguna referencia. En la nueva función, la referencia a f1 se refiere a sí misma (por lo que se repetirá para siempre cuando se la invoque).

Si desea mantener una referencia al primero para que se pueda usar en el segundo, solo asigne al segundo un nombre diferente, como este:

Parque infantil TS

 const f1 = (x: number) => x + 100; const f2 = (x: number) => f1(x) + 20; console.log(f2(3)); // 123

Si desea aplicar una serie de transformaciones en un número (pero no quiere tener que crear un nombre de variable para cada función de transformación en su programa), puede usar una matriz de funciones para procesar el número en orden, como esta :

Parque infantil TS

 type NumberTransform = (n: number) => number; function transformNumber (n: number, transforms: NumberTransform[]): number { let current = n; for (const fn of transforms) current = fn(current); return current; } const transforms: NumberTransform[] = []; transforms.push(n => n + 100); transforms.push(n => n + 20); const result = transformNumber(3, transforms); console.log(result); // 123
about 4 years ago · Santiago Trujillo Relatório

0

Creo que lo que necesita son solo dos variables para sus funciones en lugar de reasignar el f1 .

 const f1 = (x: number) => x + 100; const f2 = (x: number) => f1(x) + 20; f2(3) // 123

Según el ejemplo de código actualizado, ¿es esto algo que logra lo que está hablando?

 function makeCatActionChain(makeCatSleep: boolean, makeCatEat: boolean) { if(makeCatSleep) { return (cat: Cat) => cat.drink().sleep(); } if(makeCatEat) { return (cat: Cat) => cat.drink().eat(); } //Assuming you always want the cat to drink return (cat: Cat) => cat.drink(); }
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda