在谓词中处理返回的最佳方法

当我在谓词中返回一个函数时,编译器不会注册它,但仍然抱怨

具有块体的函数需要“返回”expression式

我find的解决方案是在谓词之后抛出一些东西。

fun boo(): Int { sth.apply { return sthElse } throw Exception("Unkown View type") } 

我想知道是否有一个更亲切的方式。

ps:实际的android代码

 override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder { LayoutInflater.from(parent?.context) .inflate(R.layout.item_category_node, parent, false) .apply { return CategoryNodeViewHolder(this, this@CategoriesAdapter) } throw Exception("View type error") } 

编辑:看到你的例子后:

  override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int) = LayoutInflater.from(parent?.context) .inflate(R.layout.item_category_node, parent, false) .let { CategoryNodeViewHolder(this, this@CategoriesAdapter) } 

在这种情况下应该使用“运行”扩展function。 根据kotlin文档 运行

调用指定的function块并返回其结果。

我的代码现在看起来像这样

 override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder { return LayoutInflater.from(parent?.context) .inflate(R.layout.item_category_node, parent, false) .run { CategoryNodeViewHolder(this, this@CategoriesAdapter) } //throw Exception("Unkown View type") } 

apply函数已经有了被调用对象的return语句,参见https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/apply.html

 override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int) = CategoryNodeViewHolder( LayoutInflater.from(parent?.context).apply{ inflate(R.layout.item_category_node, parent, false) }, this@CategoriesAdapter) 

这现在返回方法的正确对象types,同时实例化layoutInflater以及在用于实例化CategoryNodeViewHolder之前应用CategoryNodeViewHolder所需的通货膨胀。