BotBuilder-Location&按位运算符

时间:2018-03-08 14:42:42

标签: botframework bitwise-operators

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

  

使用requiredfields:                   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 = {}));

你能用简单的方式解释它是如何工作的吗? 我在这里查看了GotHub上的BotBuilder-Location文档和问题。

1 个答案:

答案 0 :(得分:0)

这里有两件事:

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

  2. 已选择与每个字段关联的数字,因此它可以属于一组位。看看他们如何遵循你在一个字节中看到的0 1 2 4 8 16 ..模式?这样他们就可以打包#34;进入一个较小的包(如一个字节)进行验证。我不完全确定它在这里是如何工作的,但是例如,如果所有必填字段都被填充,那么比特将是111111或十进制31.如果发送的比特不是31,那么将需要一个字段。没有填写。

  3. 希望这有帮助。