我是Scala的新手,并编写了以下代码:
def createProps(host: String)(config: List[KkConfig]): Eval[Properties] = {
val evalProps = Foldable[List].foldRight(config, Later(new Properties())) {
(a: KkConfig, b: Eval[Properties]) =>
a match {
case ClientId(value: String) =>
b.map((p: Properties) => {
p.put(ProducerConfig.CLIENT_ID_CONFIG, value)
p
})
case Acks(value: String) =>
b.map((p: Properties) => {
p.put(ProducerConfig.ACKS_CONFIG, value)
p
})
case Retries(value) =>
b.map((p: Properties) => {
p.put(ProducerConfig.RETRIES_CONFIG, value)
p
})
case BatchSize(value) =>
b.map((p: Properties) => {
p.put(ProducerConfig.BATCH_SIZE_CONFIG, value)
p
})
case LingerMs(value) =>
b.map((p: Properties) => {
p.put(ProducerConfig.LINGER_MS_CONFIG, value)
p
})
case BufferMemory(value) =>
b.map((p: Properties) => {
p.put(ProducerConfig.BUFFER_MEMORY_CONFIG, value)
p
})
}
}
evalProps
.map(p => {
p.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, host)
p
})
.map(p => {
p.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.ByteArraySerializer")
p
})
.map(p => {
p.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.ByteArraySerializer")
p
})
}
令我困惑的是new Properties()
对象。每次递归调用foldRight
,我都会在Properties
对象中插入一个新的键和值,每次都会更改对象。
p.put(ProducerConfig.CLIENT_ID_CONFIG, value)
我想知道,如果它是否有效,因为我在每次递归调用时都会将某些内容放入对象中。