有没有办法用函数的值声明一个变量,该函数将这个声明变量作为参数?
is there a way to declare a variable with the value of a function which takes this declaring variable as a parameter?
我想知道 Kotlin 中是否有一些语法用于声明一个变量,该变量将等于一个函数,该函数采用多个参数,其中 1 个参数称为变量?
class Player(var deck: MutableList<String> = Deck().deck) {
var playerHand = Deck().deal(deck, playerHand, 6)
}
class Deck {
var deck = mutableListOf<String>()
fun deal( from: MutableList<String>, to: MutableList<String>, num: Int ){
var temp = from.slice(0 .. num).toMutableList()
to.addAll(temp)
from.removeAll(temp)
}
}
所以我基本上想将 N 数量的牌从 Deck class 中的一个牌组转移到 Player class 中的变量 playerHand。我知道还有许多其他方法可以做到这一点,我只是想知道是否有一种方法可以创建一个 var 并使用将该 var 作为参数的函数为其赋值..
我盯着你的代码看了一会儿,终于明白你在问什么,我想:你想让 playerHand
成为一个 MutableList,其初始值来自调用 Deck().deal()
。正如@broot 在评论中所说,执行此操作的标准方法是使用 also
。我还假设当您的 class 中已经有一个套牌 属性 时,您正在实例化一个新的 Deck 实例来处理是某种拼写错误。但是,属性 应该直接是一个 Deck 实例,这样您仍然可以访问它附带的 Deck 功能。
您可以考虑让您的 Deck class 使用委托来实现 MutableList,以简化它的引用和使用方式。现在您可以直接在 Deck 实例上直接使用现有的 MutableList 函数,例如 shuffle()
。我会专门使用 LinkedList 作为委托,因为它比 mutableListOf
返回的默认值在从顶部删除值时更有效。
我还会将 deal
函数简化为 dealTo
函数,因为应该假设 Deck 只会处理自己。
综合起来:
class Player(var deck: Deck = Deck()) {
val playerHand = mutableListOf<String>().also {
deck.dealTo(it, 6)
}
}
class Deck: MutableList<String> by LinkedList<String>() {
fun dealTo(to: MutableList<String>, num: Int) {
repeat(num) {
to += removeFirst()
}
}
}
我想知道 Kotlin 中是否有一些语法用于声明一个变量,该变量将等于一个函数,该函数采用多个参数,其中 1 个参数称为变量?
class Player(var deck: MutableList<String> = Deck().deck) {
var playerHand = Deck().deal(deck, playerHand, 6)
}
class Deck {
var deck = mutableListOf<String>()
fun deal( from: MutableList<String>, to: MutableList<String>, num: Int ){
var temp = from.slice(0 .. num).toMutableList()
to.addAll(temp)
from.removeAll(temp)
}
}
所以我基本上想将 N 数量的牌从 Deck class 中的一个牌组转移到 Player class 中的变量 playerHand。我知道还有许多其他方法可以做到这一点,我只是想知道是否有一种方法可以创建一个 var 并使用将该 var 作为参数的函数为其赋值..
我盯着你的代码看了一会儿,终于明白你在问什么,我想:你想让 playerHand
成为一个 MutableList,其初始值来自调用 Deck().deal()
。正如@broot 在评论中所说,执行此操作的标准方法是使用 also
。我还假设当您的 class 中已经有一个套牌 属性 时,您正在实例化一个新的 Deck 实例来处理是某种拼写错误。但是,属性 应该直接是一个 Deck 实例,这样您仍然可以访问它附带的 Deck 功能。
您可以考虑让您的 Deck class 使用委托来实现 MutableList,以简化它的引用和使用方式。现在您可以直接在 Deck 实例上直接使用现有的 MutableList 函数,例如 shuffle()
。我会专门使用 LinkedList 作为委托,因为它比 mutableListOf
返回的默认值在从顶部删除值时更有效。
我还会将 deal
函数简化为 dealTo
函数,因为应该假设 Deck 只会处理自己。
综合起来:
class Player(var deck: Deck = Deck()) {
val playerHand = mutableListOf<String>().also {
deck.dealTo(it, 6)
}
}
class Deck: MutableList<String> by LinkedList<String>() {
fun dealTo(to: MutableList<String>, num: Int) {
repeat(num) {
to += removeFirst()
}
}
}