[英]How to return a variable in a function in kotlin
我创建了一个接收输入并将其与列表进行比较的函数,当找到匹配项时它返回匹配项,在这种情况下,此匹配项是我创建的类的属性。
我知道问题出在return语句上,因此在函数的开头,我将return声明为“ Any”,这远不止于此。
错误是这样的:具有块体('{...}')的函数中需要'return'表达式
class Class1(var self: String)
var test_class = Class1("")
fun giver(){
test_class.self = "Anything"
}
class Funciones(){
fun match_finder(texto: String): Any{
var lista = listOf<String>(test_class.self)
var lista_de_listas = listOf<String>("test_class.self")
var count = -1
for (i in lista_de_listas){
count = count + 1
if (texto == i){
lista_de_listas = lista
var variable = lista_de_listas[count]
return variable
}
}
}
}
fun main(){
giver()
var x = "test_class.self"
var funcion = Funciones()
var y = funcion.match_finder(x)
println(y)
}
我在网上搜索,如果有人遇到相同的问题,则正确的代码如下:
class Funciones(){
fun match_finder(texto: String): Any{
var lista = listOf<String>(test_class.self)
var lista_de_listas = listOf<String>("test_class.self")
var count = -1
var variable = " "
for (i in lista_de_listas){
count = count + 1
if (texto == i){
lista_de_listas = lista
var variable = lista_de_listas[count]
return variable
} else {
return "There is no match"
}
}
return variable
}
}
为了说明问题所在,让我们考虑以下代码:
class MyClass {
fun doSomething(): String {
val numbers = listOf(1, 2, 3)
for (number in numbers) {
if (number % 2 == 0) {
return "There is at least one even number in the list"
}
}
}
}
如果尝试对其进行编译,则会收到与您的问题相同的错误消息: A 'return' expression required in a function with a block body ('{...}')
。 这是为什么?
好吧,我们定义了一个函数doSomething
返回一个String(它可以是任何其他类型),但是仅当数字列表包含至少一个偶数时,我们才返回结果。 如果没有偶数,应该返回什么? 编译器不知道(怎么知道?),因此它提示我们该消息。 我们可以通过返回值或引发异常来修复代码:
class MyClass {
fun doSomething(): String {
val numbers = listOf(1, 2, 3)
for (number in numbers) {
if (number % 2 == 0) {
return "There is at least one even number in the list"
}
}
// return something if the list doesn't contain any even number
return "There is no even number in the list"
}
}
相同的逻辑适用于您的原始代码:如果没有i
这样的texto == i
,则函数应返回什么?
另请注意,您提出的解决方案在语法上可能是正确的-意味着它可以正确编译-但可能会执行某些意外操作。 for
循环是无用的,因为if/else
语句将始终使函数在第一次迭代期间返回,因此即使列表中的后面确实存在"There is no match"
也可能返回值"There is no match"
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.