为什么编译器无法识别属性?

时间:2019-03-27 18:59:25

标签: scala

我有以下代码,无法编译:

sealed trait PcpPair

case class PcpHead(key: String, value: String) extends PcpPair

case class PcpFieldValue(field: String, value: String) extends PcpPair

  private val decodeHead: List[PcpHead] => String = heads =>
    decodePair(heads) { (acc, value) =>
      acc |+| value.key |+| ":" |+| value.value |+| "\n"
    }

  private val decodePair: List[PcpPair] => ((String, PcpPair) => String) => String = pcpList => fnPcp =>
    pcpList.foldLeft("")(fnPcp)  

编译器抱怨:

 value key is not a member of com.sweetsoft.PcpPair
[error]       acc |+| value.key |+| ":" |+| value.value |+| "\n" 

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

PcpPair没有value成员。 PcpHeadPcpFieldValue可以。但是decodePair坚持接受PcpPair的列表。

我想,您需要使valuePcpPair级别上以某种方式可见,或者您必须在传递给fold的函数中显式地匹配case类。

(例如,在Haskell中,您还必须编写明确的匹配规则。)