[英]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.