gpt4 book ai didi

java - 我应该改用 scala 来创建具有重写规则的系统吗?

转载 作者:行者123 更新时间:2023-11-30 04:16:35 24 4
gpt4 key购买 nike

我开发了一些我在 Android 应用程序中使用的类。我在那个核心中有大约 6-7 个类,其中一些是带有抽象方法的抽象类。创建这些类是为了提供 API 来扩展我的 Android 应用程序。

现在我想创建一个接受重写规则的可扩展系统。这些规则对于在运行时替换某些组件很有用。想象一个具有数学运算的系统,您可以在其中看到所有的加法、乘法等。现在您可以缩小,我想根据缩放级别简化一些运算。

我的系统是用 java 构建的,但我相信带有模式匹配的 scala 会简化我的问题。然而,每次我看 scala 时,我都会看到我不得不花很多时间,而且在配置 IDE 时很头疼......

我的类(class)旨在创建这样的结构:

an example of what I can build with my classes

我希望能够编写规则来创建一个包含其他 block 的 block 。像这样的东西:

Integer Provider + Integer Provider -> Sum Provider
Sum Provider + Sum -> Sum Provider

规则可以由程序员创建。我的结构中的任何元素也可以由程序员构建。我不知道 scala 是否简化了这个规则引擎系统,但我知道这个引擎,在 java 中,构建起来可能很无聊(可能会产生很多错误,我会忘记一些情况等)。

我应该将我的所有系统更改为 scala 吗?或者只能使用 scala 的这个功能?值得吗?

PS:有关结构的更多信息,请参阅此帖子 User Experience .

最佳答案

是的,在 Scala 中编写这样的规则很容易,事实上,Stack Overflow 上已经出现了一些与 Scala 中的规则重写系统相关的问题。另外,有一些库可以帮助你解决这个问题,与战略编程和 nlp 相关,但我没有使用过它们,所以我不能发表太多评论。

现在,我不知道这些类的确切来源。如果您正在解析和构建它们,解析器组合器库可以轻松处理它:

sealed trait Expr { def value: Int }
case class Number(value: Int) extends Expr
case class Sum(e1: Expr, e2: Expr) extends Expr { def value = e1.value + e2.value }

object Example extends scala.util.parsing.combinator.RegexParsers {
def number: Parser[Expr] = """\d+""" ^^ (n => Number(n.toInt))
def sum: Parser[Expr] = number ~ "+" ~ expr ^^ {
case n ~ "+" ~ exp => Sum(n, exp)
}
def expr: Parser[Expr] = sum | number
}

如果您以其他方式拥有这些类并且正在应用简化,您可以这样做:

def simplify(expr: List[Expr]): Expr = expr match {
case expr :: Nil =>
List(expr) // no further simplification
case (n1: NumberProvider) :: Plus :: (n2: NumberProvider) :: rest =>
simplify(SumProvider(n1, n2) :: rest)
case (n: NumberProvider) :: Plus :: (s: SumProvider) :: rest =>
simplify(SumProvider(n, s) :: rest)
case (s: SumProvider) :: Plus :: (n: NumberProvider) :: rest =>
simplify(SumProvider(s, n) :: rest)
case other => other // no further simplification possible
}

这里的重要元素是案例类提取器模式匹配

关于java - 我应该改用 scala 来创建具有重写规则的系统吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9891638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com