【问题标题】:pattern for composing functions组合函数的模式
【发布时间】:2015-06-30 18:39:16
【问题描述】:

以下是一组虚构的case classes。实际上,我们有类似的 ADT。

case class Alphabet(a:Character)
case class Word(alphabets: List[Alphabet])
case class Sentence(words : List[Word])
case class Paragraph(sentences : List[Sentence])
case class Chapter(paras : List[Paragraph])

有如下所示的服务 API。

def saveSentence(sentence : Sentence)

def saveParagraph(paragraph : Paragraph)

def saveChapter(chapter:Chapter)

测试上述 API 的测试有很多种。对saveChapter 的测试将准备所有需要的数据来构造Chapter 等。

如果你想创建“可组合”的函数,比如

val alphabests :List[Alphabet] = ...

generateWord(alphabests).compose 生成Word,其他数据也是如此。其中前一个函数的输出成为后续函数的输入,其中包含从上一步构建的必要数据用于下一步。

在不依赖于测试框架的情况下,您将使用哪些模式来实现此类行为(在这种情况下是最大规模的)

【问题讨论】:

  • 如果这是测试数据,为什么不使用测试框架中的函数?

标签: scala scalaz


【解决方案1】:

我不确定,如果我理解正确,但这个功能已经为 scala 函数提供了。

 object Main extends App {
      def f(x: Int): Int = x * 2
      def g(x: Int): Int = x + 1
      def h(x: Int): Int = x + 100
      val x = g _ compose f compose h
      val y = g _ andThen  f andThen  h

      println(x(5))
      println(y(5))
    }

这里 xy 是组合函数。只是不要将实际参数传递给您的 generateWord

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 2021-01-23
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    相关资源
    最近更新 更多