LogManagerclass有两种方法:GetLogger和GetCurrentClassLogger,带有重载参数Type loggerType
public static Logger GetLogger(string name, Type loggerType)
public static Logger GetCurrentClassLogger(Type loggerType)
Run Code Online (Sandbox Code Playgroud)
文档说明loggerType'要创建的记录器的类型.该类型必须从NLog.Logger继承.
这种超载的目的是什么?为什么我需要创建继承类型的记录器?
我正试图找出一个角色是否属于一个字符串.
var s = "abcdef"
var result = s.any('d')
Run Code Online (Sandbox Code Playgroud)
但我无法理解这种语法.来自docs:
fun CharSequence.any(predicate: (Char) -> Boolean): Boolean
Run Code Online (Sandbox Code Playgroud)
如何将谓词传递给函数?
我正在尝试解决一个旧的kotlin项目中的问题.但问题是我无法编译代码.我尝试在Android Studio和IntelliJ中编译和运行.我有同样的错误.
以下是错误:
Error:(174, 25) Expression 'length' of type 'Int' cannot be invoked as a function. The function 'invoke()' is not found
Error:(176, 60) Unresolved reference: charAt
Error:(148, 67) Expression 'size' of type 'Int' cannot be invoked as a function. The function 'invoke()' is not found
Error:(107, 76) Expression 'ordinal' of type 'Int' cannot be invoked as a function. The function 'invoke()' is not found
Run Code Online (Sandbox Code Playgroud)
我的gradle脚本:
buildscript {
ext.kotlin_version = '1.0.4'
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
classpath …Run Code Online (Sandbox Code Playgroud) Maven 3.5.0在控制台输出中引入了着色.
这是一个很酷的功能,但我不喜欢一些默认的颜色选择,例如密集的蓝色INFO看起来太分散注意力.
有可能以某种方式定制颜色吗?
我有两个LocalDate声明如下:
val startDate = LocalDate.of(2019, 10, 31) // 2019-10-31
val endDate = LocalDate.of(2019, 9, 30) // 2019-09-30
Run Code Online (Sandbox Code Playgroud)
然后我使用Period.between函数计算它们之间的周期:
val period = Period.between(startDate, endDate) // P-1M-1D
Run Code Online (Sandbox Code Playgroud)
此处的期间为负数的月份和天数,如果endDate早于,则可以预期startDate。
但是,当我将其添加period回时startDate,得到的结果不是endDate,而是前一天的日期:
val endDate1 = startDate.plus(period) // 2019-09-29
Run Code Online (Sandbox Code Playgroud)
所以问题是,为什么不不变
startDate.plus(Period.between(startDate, endDate)) == endDate
保留这两个日期?
是Period.between谁返回了不正确的期限,还是LocalDate.plus谁添加了不正确的期限?
在Kotlin中,有两种表达可选参数的方法,可以通过指定默认参数值:
fun foo(parameter: Any, option: Boolean = false) { ... }
Run Code Online (Sandbox Code Playgroud)
或引入过载:
fun foo(parameter: Any) = foo(parameter, false)
fun foo(parameter: Any, option: Boolean) { ... }
Run Code Online (Sandbox Code Playgroud)
在哪种情况下首选哪种方式?
这种功能的消费者有什么区别?
我是Kotlin的新手,我不知道为什么编译器会抱怨这段代码:
data class Test(var data : String = "data")
fun test(){
var test: Test? = Test("")
var size = test?.data.length
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨test?.data.length,它说我应该这样做:test?.data?.length.但数据变量String不是String?,所以我不明白为什么我要把它放在?我想检查长度的时候.
我是Kotlin的新手.当我在地图中学习存储属性时.我尝试以下用法.
class User(val map: MutableMap<String, String>) {
val name: String by map
}
Run Code Online (Sandbox Code Playgroud)
class User(val map: MutableMap<String, in String>) {
val name: String by map
}
Run Code Online (Sandbox Code Playgroud)
class User(val map: MutableMap<String, out String>) {
val name: String by map
}
Run Code Online (Sandbox Code Playgroud)
前两个都是工作,最后一个都失败了.使用out修饰符,字节码getName如下:
public final java.lang.String getName();
0 aload_0 [this]
1 getfield kotl.User.name$delegate : java.util.Map [11]
4 astore_1
5 aload_0 [this]
6 astore_2
7 getstatic kotl.User.$$delegatedProperties : kotlin.reflect.KProperty[] [15]
10 iconst_0
11 aaload
12 astore_3 …Run Code Online (Sandbox Code Playgroud) 我正在尝试学习协同程序,因此我启动IntelliJ并创建一个临时文件.但是当我输入我的协同程序时,我得到编译器投诉,例如runBlocking未解决的引用.所以这不是一个Android项目或任何这样的事情.只是基本Kotlin项目中的临时文件.
如何引入协同程序,以便我不再收到错误?
我一直在阅读 Kotlin 协同程序,但没有找到特定问题的答案。
假设我想迭代一个集合,为每个元素进行 API 调用(在这种特殊情况下,将文件推送到 Amazon S3)。我希望这些调用由异步协程处理,以免在等待时阻塞底层线程。
我不需要请求的返回值,只需要记录异常。
我将如何创建一个“即发即忘”的异步协程来发出这些请求之一?
kotlin ×8
coroutine ×2
android ×1
asynchronous ×1
c# ×1
console ×1
data-class ×1
delegates ×1
java-time ×1
jvm ×1
localdate ×1
maven ×1
nlog ×1
overloading ×1
period ×1