Kotlin:如何使用第一个参数&x27;s默认值,并传递第二个值?
我想知道当您要指定第二个参数的值时,如何使用默认参数调用函数。在下面的简单示例中,我展示了addTwo()接受两个参数。“first”参数有默认值,但“second”参数没有。我将如何调用此函数,指定我希望使用“first”的默认值和“second”的给定值2 调用addTwo(2)会引发错误Kotlin:如何使用第一个参数&x27;s默认值,并传递第二个值?,kotlin,default-arguments,Kotlin,Default Arguments,我想知道当您要指定第二个参数的值时,如何使用默认参数调用函数。在下面的简单示例中,我展示了addTwo()接受两个参数。“first”参数有默认值,但“second”参数没有。我将如何调用此函数,指定我希望使用“first”的默认值和“second”的给定值2 调用addTwo(2)会引发错误 fun main(args: Array<String>) { var sum = addTwo(1,2) // works fine var nextSum = add
fun main(args: Array<String>) {
var sum = addTwo(1,2) // works fine
var nextSum = addTwo(2) // ERROR: No value passed for parameter second
}
fun addTwo(first: Int = 0, second: Int): Int {
return first + second
}
fun main(args:Array){
var sum=addTwo(1,2)//工作正常
var nextSum=addTwo(2)//错误:没有为参数second传递值
}
fun addTwo(第一个:Int=0,第二个:Int):Int{
第一次+第二次返回
}
这是一个错误,因为Kotlin不知道您为什么省略了第二个参数。第一个可以默认,但第二个不能默认。因此,当您只传入一个参数时,它首先是针对参数。错误消息准确地说明了问题所在:
没有为参数秒传递值
在第一个要留空的默认参数之后,必须调用using。对于您的情况,这将是:
addTwo(second = 2) // first defaulted to 0
如果您的默认参数是另一个顺序,那么您的调用就可以了
fun addTwo(first: Int, second: Int = 0): Int{
return first + second
}
addTow(2) // no error, second defaulted to 0
如果两个参数的数据类型不同,您可能会看到另一个不太清楚的错误,让您知道第一个参数(Int
)的类型是预期的,而不是第二个参数的类型(Date
,在以下示例中):
注意:您可能会遇到以下问题:
只有一个参数可以标记为vararg。如果vararg参数不是列表中的最后一个参数,则可以使用命名参数语法传递以下参数的值
附加说明:根据您的经验,将默认参数设置为列表中的最后一个参数通常是最佳做法。有些语言甚至强制这样做,例如Python(除了Python允许在默认值之后强制命名参数,因为forcong允许您在默认参数之后使用参数来命名它们。)您应该在问题中添加错误消息文本,因为它很重要,并且准确地说明了错误是什么。“第二个参数没有传递值”我在编辑中添加了错误消息。和固定缩进。学习Kotlin的旁注,请使用val
,除非您绝对需要在特定情况下使用var
,否则它不应是默认值val
是你的朋友。当你有很多默认参数时,你开始更多地使用命名参数,然后顺序就不再那么重要了,因为你必须开始使用命名参数来跳过一些默认参数。你不一定要强迫函数的用户学习更多的参数api,有时使用命名参数,最终会使代码变得混乱。另外,强制使用命名参数意味着如果其他人正在使用该函数,您肯定无法重构名称。默认值和命名参数有一个时间和地点。通常,将默认值放在列表的末尾更安全。我知道,我的大脑更容易将默认值放在列表的末尾,特别是当它们被用作标志时。
fun something(first: Int = 0, second: Date): Date { ... }
something(Date()) // ERROR: Type mismatch: inferred type is java.util.Date but kotlin.Int was expected