标签: language-concepts

Scala`match`是否构造了语法糖?如果是这样,那怎么办?

trait Expr
case class Number(n: Int) extends Expr
case class Sum(e1: Expr, e2: Expr) extends Expr

object CaseExample {
  def eval(e: Expr): Int = e match {
    case Number(n) => n
    case Sum(e1, e2) => eval(e1) + eval(e2)
  }
  def main(args: Array[String]) {
    println(eval(Sum(Number(1), Number(2))))       //> 3
  }
}
Run Code Online (Sandbox Code Playgroud)

还有相当多的语法糖.我得到的case是隐式创建两个对象

object Number extends Expr {
  def apply(n: Int) = new Number(n)
}
object Sum extends Expr {
  def apply(e1: Expr, e2: Expr) = new Sum(e1, e2)
} …
Run Code Online (Sandbox Code Playgroud)

scala language-construct syntactic-sugar language-concepts

1
推荐指数
1
解决办法
360
查看次数

W 文件、P 文件和 I 文件的含义是什么?

我正在 Progress Release 11.6 中使用 appBuilder 和过程编辑器。

正如前面的一些问题中提到的,我经常遇到 appBuilder 的问题,不想打开文件,损坏它们(删除部分源代码),......,现在的原因之一似乎是程序的限制不能超过32K,包含评论。

起初我想“我们回到了石器时代吗? ”,请原谅我的反应。

但现在我开始认为我们完全滥用了整个概念,因此我想表达我对W文件、P文件和I文件的看法,请确认(或更正):

W 文件仅包含 GUI 定义,例如带有一些框架、按钮、填充字段等的表单,任何真正的编程都需要在 P 文件中完成。
P 文件包含真正的智能:其中详细说明了程序和功能,可以由其余 P 文件使用,或者最终由 W 文件使用。
I 文件只是用来包含一般行为。

让我举一个例子:

W 文件:

DEFINE VARIABLE combo_information VIEW-AS COMBOBOX /* with some information on the content, if this is static */
...
ON CHOOSE OF combo_information DO:
  RUN very_large_procedure.
END.
...
{about.i} /* see here-after */
...
Run Code Online (Sandbox Code Playgroud)

P 文件:

PROCEDURE very_large_procedure:
DO /* a lot */
END.
Run Code Online (Sandbox Code Playgroud)

I 文件(about.i):

/* Describes the help-about …
Run Code Online (Sandbox Code Playgroud)

progress-4gl language-concepts openedge

1
推荐指数
1
解决办法
671
查看次数

为什么回调函数允许我们在Javascript中异步执行操作?

我已经读过,回调会异步制作JavaScript.但我不确定我是否理解这个解释.这就是我得到的

回调函数允许我们异步执行操作,因为它们确保在加载下一行之前回调之前的行已完全完成.

真的吗?谢谢

javascript asynchronous callback language-concepts

0
推荐指数
1
解决办法
542
查看次数

当重载父方法时,为什么 PHP8.1 改为弃用不兼容的返回类型?

我像这样重载了类query的方法:mysqli

class MySql extends \mysqli
{
    function query(string $sql): ?MySqlResult  // line #30
    {
        $result = parent::query($sql);
        return new MySqlResult($result);
    }
}
Run Code Online (Sandbox Code Playgroud)

在 PHP8.0 中这不是问题。但是,从 PHP8.1 开始,我现在收到此错误:

已弃用: 的返回类型Repository\MySql\MySql::query($sql, $resultmode = null)应与 兼容mysqli::query(string $query, int $result_mode = MYSQLI_STORE_RESULT): mysqli_result|bool,或者#[\ReturnTypeWillChange]应使用该属性暂时抑制repository\src\MySql\MySql.php第 30 行中的通知

我知道如何修复错误 - 我可能最终会更改方法的名称,因为我想返回我自己的自定义对象。

问题

我正在寻找一个答案,从理论和面向对象的角度来捕捉这种变化的需要,也许使用语言理论,或者将其与其他语言进行比较。

为什么需要进行此更改?进行此更改的必要性或原因是什么?在扩展类时,有什么方法可以允许 PHP 中重载返回类型?

php oop language-concepts deprecation-warning php-8.1

0
推荐指数
1
解决办法
1248
查看次数

为什么 i=i++ 时 i 的值不增加;陈述?

代码:

for(int i=0;i<5;){
  i=i++;
  printf("%d",i);
}
Run Code Online (Sandbox Code Playgroud)

上面的程序无限打印零,这怎么可能?有声明i=i++;。请解释为什么 的值i不增加。

c language-concepts post-increment

-5
推荐指数
1
解决办法
151
查看次数