这个问题是关于 fun() 与 lambda 块定义和范围的问题。
我尝试用两种方式定义表达式。这是我尝试过的:
val myFunction = fun(){
println("i am in a function")
}
//but i also tried doing this:
val myFunction = {
println("i am in a lambda")
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我不知道它们是否等效且相同?
这里等于重载
class MyClass {
...
val string: String = ...
override operator fun equals(other: Any?): Boolean {
if (other != null) else { return false }
if (other is MyClass && string == other.string) { return true }
if (other is String && string == other) { return true }
return false
}
...
}
Run Code Online (Sandbox Code Playgroud)
这个想法是能够比较:
myClass1 = MyClass("ABCDEF")
myClass2 = MyClass("ABC123")
myClass1 == fsPath2 >> false
or
myClass1 == "ABC123" >> false
Run Code Online (Sandbox Code Playgroud)
但预编译显示:运算符 '==' 不能应用于 'MyClass' 和 'String'
任何想法?
我有自定义的Kotlin函数:
fun getActiveCartTest(isAsync: Boolean = false, vararg callback: Callback<Cart> ): TransportResponse? {
...
}
Run Code Online (Sandbox Code Playgroud)
它具有一个默认参数(isAsync)和一个可选(vararg)回调参数。我可以像这样从Java调用此函数:
1. TransportResponse transportResponse = TransportService.INSTANCE.getActiveCartTest();
2. TransportResponse transportResponse = TransportService.INSTANCE.getActiveCartTest(false);
3. TransportResponse transportResponse = TransportService.INSTANCE.getActiveCartTest(true);
4. TransportService.INSTANCE.getActiveCartTest(true, new DefaultRestClientCallback<Cart>() {
@Override
public void onTransportResponse(@NotNull TransportResponse transportResponse) {
}
});
Run Code Online (Sandbox Code Playgroud)
很好,可以。但是,当我使用此调用时:
TransportResponse transportResponse = TransportService.INSTANCE.getActiveCartTest(true);
Run Code Online (Sandbox Code Playgroud)
我收到一个编译错误。
我的意思是。当客户端想要调用函数的异步调用时,getActiveCartTest它必须使用两个参数:isAsync AND callback。
如您在我的函数中所见,getActiveCartTest客户端可以省略第二个参数(callback)。不对
我需要第一个param isAsync = true,那么用户还必须 …
我是kotlin的新手,我的代码有问题:我不知道为什么当我创建类的实例时却给了我stackoverflow错误
这是代码:
class Spice(val spiceName: String,val spiciness: String = "mild") {
init {
println("[$spiceName - $spiciness] ")
}
val spiceList: List<Spice> = listOf(
Spice("curry", "mild"),
Spice("pepper", "medium"),
Spice("cayenne", "spicy"),
Spice("ginger", "mild"),
Spice("red curry", "medium"),
Spice("green curry", "mild"),
Spice("hot pepper", "extremely spicy"))
val heat: Int
get() {
return when (spiciness) {
"mild" -> 1
"medium" -> 3
"spicy" -> 5
"very spicy" -> 7
"extremely spicy" -> 10
else -> 0
}
}
fun makeSalt() = Spice("Salt")
}
Run Code Online (Sandbox Code Playgroud) 我想乘281.65用100和得到28165,我执行:
fun main(args: Array<String>) {
println("${281.65 * 100}")
}
Run Code Online (Sandbox Code Playgroud)
但我得到28164.999999999996
这里的问题是什么,如何得到28165结果?有没有好的Kotlin处理方式?
假设您要转换此代码:
val initialValues: List<Pair<String, String>>
Run Code Online (Sandbox Code Playgroud)
其中第一个String代表键,第二个String代表值
进入地图:
val finalMap: Map<String,String>
Run Code Online (Sandbox Code Playgroud)
每个对项包含两次,第一个具有原始密钥,第二个具有某种扩展密钥。
你会怎么做?目前,我正在使用
val finalMap = mutableMapOf<String, String>()
Run Code Online (Sandbox Code Playgroud)
我在遍历时使用的代码initialValues。但是我真的不喜欢。
initialValues.forEach {
val explodedPairs:List<Pair<String,String>> = <do-something>
explodedPairs.forEach { finalMap.put(it.first, it.second) }
}
Run Code Online (Sandbox Code Playgroud)
您将如何更果断地做?
我正在使用Kotlin学习android开发。作为主要的Web开发人员,我对这两种技术都是陌生的。
在寻找API-29连接解决方案(NetworkInfo和getActiveNetworkInfo中已弃用API-29)时,我遍历了该表达式以进行变量声明。
protected var callbackFunction: ((Boolean) -> Unit) = {}
abstract fun startListening(callback: (Boolean) -> Unit)
Run Code Online (Sandbox Code Playgroud)
我将如何解释?我说的是,变量callbackFunction是Boolean类型还是Unit类型。或者是其他东西。在该抽象函数中,回调类型是Boolean还是Unit或其他?
我也对花括号有点困惑。这是否意味着变量是由空的匿名函数(类似于JavaScript)初始化的,还是完全不同的概念?
在Python中,我可以创建功能关键字的字典并调用其关键字,而无需运行字典中的其他功能。有相当于Kotlin的东西吗?
我创建了一个mutableMapOf(1到a(),2到b()),该函数可以部分工作,但是即使未调用其键,这两个函数也会每次运行。在Python中,我可以说:
def a(): print("Hi")
def b(): print("Bye")
function_dictionary = {1: a, 2: b}
function_dictionary[1]() //runs a()
Run Code Online (Sandbox Code Playgroud)
在科特林,我只能想到:
fun a(){println("Hi")}
fun b(){println("Bye")}
val functionMap = mutableMapOf<Int, Unit>(1 to a(), 2 to b()) //a() and b() both run
functionMap[1] //runs a() again
Run Code Online (Sandbox Code Playgroud)
在Kotlin示例中,无论是否选择了分配给它们的地图键,这些功能都会运行。我可以制作与字典中的字典相同的地图吗?
我刚开始使用Kotlin,为了进行练习,我想成对读取程序参数。
程序的输入如下Alice 10 Bob 20 ...
我有一个当前版本,可以通过分块输入并成对迭代来合理地工作
for((name, age) in args.asIterable().chunked(2))
Run Code Online (Sandbox Code Playgroud)
但是,如果我传递的参量数量不一,则最后一个分块列表仅包含一个元素,并且赋值失败并带有IndexOutOfBoundsException。
我可以通过在分块列表上添加一个过滤器来完成这项工作,如果它的大小不正确,该过滤器将丢弃最后一个列表:
for((name, age) in args.asIterable().chunked(2).filter { it -> it.size==2 })
Run Code Online (Sandbox Code Playgroud)
但是,我对此有一些问题
是使分块仅返回完整块的好方法,还是仅读取完整子列表的安全且优雅的方法?