javascript - 需要帮助理解这个 lisp 函数

标签 javascript c#

我无法理解此函数中的返回行。

我正在用 C# 创建一个解析器,发现这个教程 ( http://lisperator.net/pltut/parser/the-parser ) 是用 Javascript 编写的。看不懂函数的返回行

function is_punc(ch) {
    var tok = input.peek();
    return tok && tok.type == "punc" && (!ch || tok.value == ch) && tok;
}

我相信它会在以下情况下返回 true:tok 不为 null 且其类型为 punc AND(char ch 不为 null 或 tok 的值等于 ch)且 tok 不为 null。

如果我没看错,为什么他两次评估 tok is not null。

最佳答案

在这种情况下它没有意义,但 JavaScript 中的逻辑运算符与 Python 和 Lisp 中的逻辑运算符一样工作(在这个问题中与 Lisp 的唯一联系)。

a && b返回 a如果是“false-y”,否则返回 b .
同样,a || b返回 a如果它是“truth-y”,否则返回 b .

示例(来 self 的 Firefox 控制台):

> "" && 23
< ""
> 0 && 23
< 0
> 1 && 23
< 23
> 1 && "hello"
< "hello"
> "hello" || "world"
< "hello"
> 0 || "world"
< "world"

这意味着最后的 tok如果所有其他条件都为真,则使函数返回 token 本身。

关于javascript - 需要帮助理解这个 lisp 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56405321/

相关文章:

javascript - 使多组合框和项目的尺寸相同

javascript - 使用javascript将html转换为xml?

c# - 在 asp.net 中检测用户域

javascript - Jekyll 未加载图像的 Javascript

javascript - YouTube如何以1个网址打开2个JPG

javascript - onClick 事件触发后提交的属性不会更新

c# - 如何通过引用同一 JSON 中的另一个键来获取键的值?另外如何将字符串添加到 uri 末尾?

c# - INSERT INTO 语句 ASP.Net C# 中的语法错误

c# - 调用 Task.WaitAll() 时如何设置任务的用户身份?

c# - 计算网站上HTML元素的面积?