从 forEachLine 返回

问题描述 投票:0回答:2

我有这个方法

private fun getDeviceType(): Device {
    ExecuteCommand().forEach {
        if (it == "my search string") {
            return Device.DEVICE_1
        }
    }
    return Device.UNKNOWN
}

其中

ExecuteCommand()
实际上执行
cat file
并返回文件内容的列表。因此,我没有执行 shell 命令,而是将其更改为

private fun getDeviceType(): Device {
    File(PATH).forEachLine {
        if (it == "my search string") {
            return Device.DEVICE_1
        }
    }
    return Device.UNKNOWN
}

但是现在编译器抱怨

return is not allowed here

如何退出关闭?

closures kotlin
2个回答
3
投票

前一个示例之所以有效,是因为

forEach
是一个 内联方法,而
forEachLine
则不是。但是,您可以这样做:

private fun getDeviceType(): Device {
    var device = Device.UNKNOWN
    File(PATH).forEachLine {
        if (it == "my search string") {
            device = Device.DEVICE_1
        }
    }
    return device
}

3
投票

您可以使用文件中的

Sequence<String>
行:

private fun getDeviceType(): Device {
    File(PATH).useLines { lines ->
        lines.forEach {
            if (it == "my search string") {
                return Device.DEVICE_1
            }
        }   
    }

    return Device.UNKNOWN
}

对于较小的文件,也可以将行读入列表中:

private fun getDeviceType(): Device {
    File(PATH).readLines().forEach {
        if (it == "my search string") {
            return Device.DEVICE_1
        }
    }   

    return Device.UNKNOWN
}
© www.soinside.com 2019 - 2024. All rights reserved.