【问题标题】:Pattern Matching framework?模式匹配框架?
【发布时间】:2009-12-24 07:01:04
【问题描述】:

我将很快处理一个 Java (GWT) 项目 (related question)。也许我想在这里扩展一些东西,但我想知道是否有任何用 Java 编写的“模式匹配框架”(真的不知道是否有这个术语)? (也许是我长时间接触 Erlang 让我对模式的想法一直在扭曲:-)

我将使用“消息传递”架构在我的 Java 组件之间进行通信,并且我希望有效地将消息“匹配”到操作。

也许我应该坚持使用本地化状态机,或者还有什么其他的吗?

更新:“消息”将是携带“仅数据”的实例对象。我目前不打算使用继承来向所述消息传达语义,而是使用简单的属性。

Update2:在利用 SO (see here) 的集体智慧之后,似乎 Scala 也超出了范围。

(注意:这里是 Java 新手...请温柔)

【问题讨论】:

  • 模式匹配通常与正则表达式有关。我认为您想要的不仅仅是一个用于对象间交互的“消息传递”系统?
  • 听起来很像 Scala 案例类...也许看看? (抱歉我不太熟悉)
  • scala...嗯...我对 Scala 一无所知...@Jason:你应该写一个答案(我对贡献者很温和,因为我的个人资料清楚地显示了)。
  • 您是否有具体的消息示例以及您可以向我们展示的操作?和 Nick 一样,我也立即想到了正则表达式,但我假设您对这些很熟悉,因为它们在 Erlang 和大多数其他语言中也有。
  • 模式匹配是函数式编程语言的特性,与正则表达式无关。 Scala 支持模式匹配,但我认为 GWT 编译器不支持 scala。它仅使用核心 Java 库的子集从纯 Java 编译

标签: java gwt pattern-matching


【解决方案1】:

您可能正在寻找 Javaspaces(元组空间的 Java 实现)和基于属性匹配的对象(在 Javaspace 世界中称为“条目”)。

空间存储具有特定属性或条目的对象(例如关联的货币、城市、用户等)。然后,您可以通过指定 0 个或多个此类条目从空间中选择对象,从而取回 0 个或多个对象。因此,它特别适用于消息传递和生产者/消费者场景。

因此,您可以存储具有特定属性(例如消息类型、消费者类型等)的对象(消息),并且您的消费者将根据一组 0 个或多个属性选择这些对象。请注意,这需要修改您存储的基础对象。您可以在 in-process (在一个 JVM 中)运行空间 - 这不仅仅是一种网络存储模式。

【讨论】:

  • +1:我已经很喜欢我正在阅读的内容了...谢谢!
【解决方案2】:

我认为您想要的模式匹配是regular expressions,根据您的描述,您将有一个event-driven program,其中消息是事件。

不要那样做。而是使用实际对象作为消息,这样您就不必解析任何内容(这很慢),而只需匹配类型并检查相关指令(这很快)以了解实际操作.把这一切做成一个状态机也不错。

【讨论】:

  • 是的,接收“消息”可以被认为是“事件”,但我没有提到正则表达式,也不会在手头的情况下这样做:这些很明显(至少在我看来,抱歉;-) 超出范围。
  • 事件消息,但是消息的形式很重要,这样您才能正确快速地使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多