【问题标题】:BotBuilder-Location & bitwise operatorsBotBuilder-位置和位运算符
【发布时间】:2018-03-08 14:42:41
【问题描述】:

我经常使用 BotBuilder-Location,它工作正常,但我不明白它如何检查必填字段。 我不是 bitwize 运算符方面的专家:

必填字段: locationDialog.LocationRequiredFields.streetAddress | locationDialog.LocationRequiredFields.locality | locationDialog.LocationRequiredFields.region | locationDialog.LocationRequiredFields.postalCode | locationDialog.LocationRequiredFields.country

如果我去node_modules/botbuilder-location/lib/dialogs/required-fields-dialog.js我可以看到这个自调用函数:

(function (LocationRequiredFields) {
    LocationRequiredFields[LocationRequiredFields["none"] = 0] = "none";
    LocationRequiredFields[LocationRequiredFields["streetAddress"] = 1] = "streetAddress";
    LocationRequiredFields[LocationRequiredFields["locality"] = 2] = "locality";
    LocationRequiredFields[LocationRequiredFields["region"] = 4] = "region";
    LocationRequiredFields[LocationRequiredFields["postalCode"] = 8] = "postalCode";
    LocationRequiredFields[LocationRequiredFields["country"] = 16] = "country";
})(LocationRequiredFields = exports.LocationRequiredFields || (exports.LocationRequiredFields = {}));

你能简单地解释一下它是如何工作的吗? 我检查了这里以及 GitHub 上的 BotBuilder-Location 文档和问题。

【问题讨论】:

    标签: botframework bitwise-operators


    【解决方案1】:

    这里发生了两件事:

    1. 此代码最初是用 typescript 编写的,然后转换为 javascript。 javascript 没有枚举。因此,当 typescript 枚举转换为 javascript 时,它们会变成哈希图,这就是您在问题的函数中看到的内容。

    2. 已选择与每个字段关联的数字,以便它可以落入一组位。看看他们是如何遵循 0 1 2 4 8 16.. 模式的,你会在一个字节中看到吗?这样可以将它们“打包”到一个较小的包(例如一个字节)中以进行验证。我不确定它在这里是如何工作的,但是例如,如果所有必填字段都已填写,则位将为 111111 或十进制 31。如果发送的位不是 31,则会有一个未填写的必填字段.

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多