它是否满足功能原理?

时间:2017-11-14 08:24:43

标签: scala

我是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)  

我想知道,如果它是否有效,因为我在每次递归调用时都会将某些内容放入对象中。

0 个答案:

没有答案