我需要匹配所有这些开始标记:
<p>
<a href="foo">
Run Code Online (Sandbox Code Playgroud)
但不是这些:
<br />
<hr class="foo" />
Run Code Online (Sandbox Code Playgroud)
我想出了这个,并希望确保我做对了.我只抓住了a-z.
<([a-z]+) *[^/]*?>
Run Code Online (Sandbox Code Playgroud)
我相信它说:
/,然后我有这个权利吗?更重要的是,你怎么看?
在Kotlin中,具有至少一个参数的函数可以定义为常规非成员函数,也可以定义为扩展函数,其中一个参数是接收者.
对于范围界定,似乎没有区别:两者都可以在类和其他函数内部或外部声明,并且两者都可以或不可以具有相同的可见性修饰符.
语言参考似乎不建议在不同情况下使用常规函数或扩展函数.
所以,我的问题是:扩展功能何时优于常规非成员功能?当常规的扩展?
foo.bar(baz, baq)VS bar(foo, baz, baq).
它只是一个函数语义的提示(接收器肯定是焦点)或是否有使用扩展函数使代码更清洁/开辟机会的情况?
这是标准的Kotlin功能(据我所知)
inline fun<T> with(t: T, body: T.() -> Unit) { t.body() }
Run Code Online (Sandbox Code Playgroud)
但是,任何人都可以用简单的英文写下签名的意思吗?它是T的通用函数,第一个参数"t"表示类型T,第二个参数是函数类型的"body",接受函数???? 没有返回(单位)
我看到这个符号Something.() - >有些东西经常使用,即对于Anko:
inline fun Activity.coordinatorLayout(init: CoordinatorLayout.() -> Unit) = ankoView({ CoordinatorLayout(it) },init)
Run Code Online (Sandbox Code Playgroud)
但我不认为它在任何地方被解释了.()意味着......
我已经阅读了3次文档,但我仍然不知道它的作用.有人可以ELI5(解释就像我五岁)吗?这是我使用它的方式:
fun main(args: Array<String>) {
val UserModel = UserModel()
val app = Javalin.create().port(7000).start()
with (app) {
get("/users") {
context -> context.json(UserModel)
}
}
}
Run Code Online (Sandbox Code Playgroud) 在一次 kotlin 采访中,有人问我it&this关键字之间的区别。
我在谷歌上搜索过,但无法找到问题的正确答案。
有人可以指导我这两者之间的实际区别是什么?
我知道这是非常基本的问题,我是 kotlin 的新手。
大多数 Jetpack Compose API 使用Dp作为尺寸单位,但有时需要像素值。如何将 dp 值转换为 px?举个例子,graphicsLayer()修饰符接受translationX/Y以像素为单位的参数。
不知道这意味着什么,但我在kotlin html代码库中遇到了这种语法.SCRIPT.()是什么意思?
fun FlowOrPhrasingOrMetaDataContent.script(type : String? = null, src : String? = null, block : SCRIPT.() -> Unit = {}) : Unit = SCRIPT(attributesMapOf("type", type,"src", src), consumer).visit(block)
Run Code Online (Sandbox Code Playgroud)
SCRIPT是一个类 - https://github.com/Kotlin/kotlinx.html/blob/master/shared/src/main/kotlin/generated/gen-tags-s.kt.
或者更一般地说,<ClassName>.()Kotlin的意思是什么?
如果我们想在类型上测试扩展函数,我们可以创建这种类型的实例,调用函数并检查返回的值.但是如何测试类中定义的扩展函数呢?
abstract class AbstractClass<T> {
fun doStuff(): T = "Hello".foo()
abstract fun String.foo(): T
}
class SubClass1: AbstractClass<Int>() {
override fun String.foo(): Int = 1
}
class SubClass2: AbstractClass<Boolean>() {
override fun String.foo(): Boolean = true
}
Run Code Online (Sandbox Code Playgroud)
我们如何测试方法的逻辑foo()中类SubClass1和SubClass2?它甚至可能吗?
我知道我可以改变设计来测试它.我有两种可能性:
不要使用扩展功能.¯\ _(ツ)_ /¯
abstract class AbstractClass<T> {
fun doStuff(): T = foo("Hello")
abstract fun foo(string: String): T
}
class SubClass1: AbstractClass<Int>() {
override fun foo(string: String): Int = 1
}
Run Code Online (Sandbox Code Playgroud)
然后我们可以创建一个对象SubClass1,调用foo()并检查返回的值. …
我正在读关于Kotlin的内容并没有完全理解
从我理解的扩展函数赋予具有新功能的类的能力,而不必从类继承
什么是接收器相同,除了它可以分配给变量
还有别的吗?
有人可以提供一些例子
你会如何以更科学的方式编写以下代码?
var returnValue = ...
val s3data = presignedUrl.body()
if (s3data != null) {
val uploadImage = api.uploadImage(s3data.bucketUrl, s3data.awsAccessKeyId, s3data.policy, s3data.key, s3data.signature, body).execute()
if (!uploadImage.isSuccessful) {
crashReporterService.sendIssue("Failed uploading file", "Failed uploading file ${uploadImage.raw()}")
returnValue = Result.FAILURE
} else {
returnValue = Result.SUCCESS
}
} else {
crashReporterService.sendIssue("Failed uploading image", "Error - ${presignedUrl.raw()}")
returnValue = Result.FAILURE
}
return returnValue
Run Code Online (Sandbox Code Playgroud)
我可以使用let,但我觉得它使代码更难理解