Eu tenho uma função
fun foo(
id: String,
vararg values: Int,
){
...
}
e há chamadas como essas
fun bar1(){
foo("id_1")
foo("id_2", 1)
foo("id_3", 1, 2, 3)
}
Agora entendi que preciso adicionar mais um argumento para foo. mas não quero interromper chamadas existentes, então tentei adicioná-lo com valores padrão:
fun foo(
id: String,
attributes: Array<String> = arrayOf("a", "b"),
vararg values: Int,
){
...
}
Mas
foo("id_2", 1)
foo("id_3", 1, 2, 3)
ficou quebrado.
Existe uma maneira de adicionar mais um argumento com valor padrão sem interromper as chamadas existentes?
Sou novo em Kotlin, mas você me fez aprender isso hoje, obrigado! Estava usando o Kotlin Playground.
Você estava perguntando sobre uma maneira de adicionar mais um argumento com valor padrão sem interromper as chamadas existentes.
Você pode fazer isso usando atributos após vararg como
Mas espere, isso vai gerar um erro em relação ao tipo, porque o atributo que você quis transmitir no final de foo() também será considerado como vararg, então para usar esse código teremos que chamar a função assim:
onde for necessário você pode adicionar
,attributes=loremipsum
e se não for possível deixe-o.Opção 1:
Você pode, se mover o novo parâmetro para o final:
Mas fica um pouco estranho chamar:
Você precisa especificar o nome do parâmetro, caso contrário o compilador pensará que o array ainda faz parte do parâmetro varargs.
Opção 2:
Você pode sobrecarregar a função:
Então você pode chamá-lo assim:
Isso é mais elegante no local da chamada, mas há uma pequena sobrecarga no lado da declaração.