【问题标题】:assignments are not expressions, and only expressions are allowed in this context --- how to resolve this error赋值不是表达式,在此上下文中只允许使用表达式 --- 如何解决此错误
【发布时间】:2020-09-04 16:19:28
【问题描述】:

我正在尝试查找将 num1 提升到 num2 次方的结果: 这是我的代码 ->

 fun power(num1 : Int, num2: Int): Int {
      var result = 1
      while (num2 != 0) {
       return  result *= num1
       num2--
      }
    } 

但是上面的代码会产生以下错误-->

Calculator.kt:30:16: error: assignments are not expressions, and only expressions are allowed in this context
       return  result *= num1
               ^
Calculator.kt:33:5: error: a 'return' expression required in a function with a block body ('{...}')
    } 
    ^

我读了很多文章,但无法理解。任何帮助将不胜感激。 谢谢

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    表达式是计算值的东西。赋值是将值赋给变量或属性的东西。

    x *= yx = x * y 的简写形式。

    你不能返回一个赋值,因为它不计算一个值。赋值包含等号右侧的表达式,但整体不代表表达式。

    您还有其他一些语法问题。您不能修改函数参数的值(不允许使用num2--)。

    逻辑也没有意义。 return 立即返回一个表达式。要修复您的代码,您需要从 num2 创建一个局部变量,并将 return 语句移到末尾。

    fun power(num1 : Int, num2: Int): Int {
        var result = 1
        var count = num2
        while (count != 0) {
            result *= num1
            count--
        }
        return result
    }
    

    仅供参考,有一个名为repeat 的函数比使用带计数器的while 循环更简单。它会按照您给出的次数运行括号内的代码。

    fun power(num1 : Int, num2: Int): Int {
        var result = 1
        repeat(num2) {
            result *= num1
        }
        return result
    }
    

    【讨论】:

      【解决方案2】:

      您的函数包含多个错误,建议您学习Kotlin,here 参考。 Kotlin 网站有更多资料。

      回到你的问题,我修改了你的函数:

      fun power(num1 : Int, num2: Int): Int {
        var result = 1
        var num2_local = num2
        while (num2_local != 0) {
         result *= num1
         num2_local--
        }
        return result
      } 
      

      您的版本有问题:

      • 你立即从函数中返回
      • 传递给 kotlin 函数的基本类型 args 由 const copy 传递,这意味着您无法修改它们(例如 num2--

      如果你在你的函数中保留一个本地可修改的引用(var 关键字),那么你就实现了你的目标

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-29
        • 1970-01-01
        • 1970-01-01
        • 2020-04-24
        • 1970-01-01
        • 2013-02-01
        • 2020-11-21
        • 2017-05-23
        相关资源
        最近更新 更多