- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我真的可以用你的帮助来解释这个功能。
我有一个包含 2 个字符串值、一个国家名称和一个货币的国家枚举。练习是使用 2 个字符串输入,检查枚举是否有国家,然后比较它们的货币,相应地返回 true 或 false。我设法用 2 个 for 循环和 2 个 if 来做到这一点,但我知道这并不理想。
然后我尝试使用 contains()
和 valueOf(input)
但是当输入不在枚举中时,它会抛出 valueOf()
的非法参数异常。
if (values().contains(valueOf(country1.toUpperCase())) && values().contains(valueOf(country2.toUpperCase()))) {
return valueOf(country1.toUpperCase()).currency == valueOf(country2.toUpperCase()).currency
} else return false
我在这里搜索并找到了
valueOfOrNull()
我不太明白的方法
inline fun <reified T : Enum<T>> enumValueOfOrNull(country: String): T? {
return enumValues<T>().find { it.name == country.toUpperCase() }
}
你能帮我解释一下这是如何工作的吗?我不知道内联、具体化的 T: Enum 是如何工作的以及它返回什么。
.find {}
有了一个基本的了解。部分,但我可以使用
it
的解释
最佳答案
在 Kotlin , inline
functions让他们的 body 在编译时转换,并且,在每个调用站点内联。虽然这需要编译器做更多的工作并导致更大的二进制文件,inline
函数更灵活一些,因为编译器不是将它们的主体编译成一个字节码,而是从每个调用站点获取更多附加信息,并将其嵌入到内联主体中,根据调用产生不同的结果。嵌入到转换后的内联函数体中的此类附加数据的一个示例是从调用站点传递给函数的 lambda,允许 non-local control flow .
编译器可以为特定调用站点转换主体的另一种方法是嵌入来自调用站点的实际泛型类型参数。在为所有调用站点生成单个编译函数体时,编译器无法生成任何将实际类型参数考虑在内的代码,例如 foo is T
检查。换句话说,实际的 type arguments are erased .但是,通过每个单独的调用站点的内联正文,这成为可能。该功能称为 reified
type parameters .
然后, enumValues
是编译器特别对待的内在函数,可以在作为 Enum
子类型的具体类型参数上调用(每个 enum class
都是),然后在内联函数体中会有一个返回枚举值的调用。这不是唯一在内联期间使用 reified 类型参数的内在函数: typeOf
也这样做,并产生 KType
可以用来内省(introspection)实际类型参数的标记。
关于kotlin - 你能帮我解释一下这个功能是如何工作的吗?它使用 Inline、reified、valueOf() 和 enumValues,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64063540/
嗨,我是第一次玩 Pig,我很好奇如何处理将一个字段拆分成多个其他字段。 我有一个包,A,如下图: grunt> Dump A; (text, text, Mon Mar 07 12:00:00 CD
如何添加架构中未定义的固定字段(例如日期或月份)?我运行了以下 pig 脚本以将固定日期添加到我的结果表中,并收到以下错误消息:Invalid field projection。方案中不存在投影字段
我是一名优秀的程序员,十分优秀!