Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

116
Views
Error de Google Apps Script al confundir una variable con una función

Estoy creando un sistema de clasificación de clasificación de Elo en Google Sheets usando Apps Script y mientras ejecuto la siguiente función que calcula los cambios de Elo, aparece el error "TypeError: kleft no es una función". No entiendo por qué mi variable "kleft" está siendo confundido con una función o donde me estoy equivocando ya que he escrito un código similar varias veces antes sin ningún problema.

 //function to calculate Elo change function elorat(leftscore,rightscore){ //leftscore and rightscore are the actual points scored by the two players in the match var sheet = SpreadsheetApp.getActive(); var mtd = sheet.getSheetByName('MTD'); var leftelo = mtd.getRange("K4").getValue(); //elo of player 1 before the game var rightelo = mtd.getRange("N4").getValue(); //elo of player 2 before the game var expectleft = 1/(1 + Math.pow(10,(rightelo-leftelo)/1000)); //expected points scored by player1 var expectright = 1/(1 + Math.pow(10,(leftelo-rightelo)/1000)); //expected points scored by player2 var kleft = 0; //declaring the k-factor to be used in calculations var kright = 0; if(1000<leftelo<9000){ var kleft = Math.round((-0.00001125*(leftelo-1000)*(leftelo-9000))+20); //adjusting k-factor of player1 based on current elo } else{ var kleft = 20; //boundary case } if(1000<rightelo<9000){ var kright = Math.round((-0.00001125*(rightelo-1000)*(rightelo-9000))+20); } else{ var kright = 20; } var leftchange = Math.round(kleft(leftscore-expectleft)); //amount of change in elo post match for player1 var rightchange = Math.round(kright(rightscore-expectright)); //amount of change in elo post match for player2 mtd.getRange("K5").setValue(leftchange); //setting values onto the sheet mtd.getRange("N5").setValue(rightchange); mtd.getRange("K6").setValue(leftelo+leftchange); mtd.getRange("N6").setValue(rightelo+rightchange); }
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Hay un par de problemas.

Problema 1:

En primer lugar, esta expresión if(1000<leftelo<9000) se evalúa siempre como true .

Puede probarlo usted mismo si console.log(1000<5<9000) seguirá siendo true .

Reemplázalo con:

 if(leftelo > 1000 && leftelo < 9000)

y lo mismo para rightelo

Problema 2:

Tanto kleft como kright son variables normales, pero las usa como funciones y es por eso que el compilador da ese error.

En casi todos los lenguajes de programación, esta expresión kleft(leftscore-expectleft) significa que tienes una función con el nombre kleft y estás tratando de pasar un valor que es el resultado de leftscore-expectleft .

Lo que quieres en cambio es multiplicar kleft con (leftscore-expectleft) :

 kleft * (leftscore-expectleft) kright * (rightscore-expectright)

Finalmente, no estoy seguro de dónde está llamando a la función elorat . Si este es todo su código, de nuevo, esto no funcionará porque esta función espera dos argumentos. Pero dado que no recibió un error por eso, supongo que hay algún código que no se comparte aquí.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!