| skipped 52 lines |
53 | 53 | | |
54 | 54 | | ### Const 值 |
55 | 55 | | |
56 | | - | 在VDSL中,基本上所有的值(除了数组和映射)都是常量。 |
| 56 | + | 在VDSL中,基本上所有的值(除了数组和映射)都是常量。 |
57 | 57 | | |
58 | 58 | | ```golang |
59 | 59 | | s := "12345" |
| skipped 19 lines |
79 | 79 | | a = false // ok |
80 | 80 | | ``` |
81 | 81 | | |
82 | | - | 请注意,如果复制(使用“copy”内置函数)常量值将返回一个“可变”副本。此外,不变性不适用于数组或映射值的各个元素,除非它们是显式生成的常量。 |
| 82 | + | 请注意,如果复制(使用“copy”内置函数)常量值将返回一个“可变”副本。此外,不变性不适用于数组或映射值的各个元素,除非它们是显式生成的常量。 |
83 | 83 | | |
84 | 84 | | ```golang |
85 | 85 | | a := const({b: 4, c: [1, 2, 3]}) |
| skipped 121 lines |
207 | 207 | | - `:=`运算符在作用域中定义一个新变量并赋值。 |
208 | 208 | | - `=`运算符为作用域中的现有变量分配一个新值。 |
209 | 209 | | |
210 | | - | 变量在全局范围(在函数外部定义)或本地范围(在功能内部定义)中定义。 |
| 210 | + | 变量在全局范围(在函数外部定义)或本地范围(在功能内部定义)中定义。 |
211 | 211 | | |
212 | 212 | | ```golang |
213 | 213 | | a := "foo" // define 'a' in global scope |
| skipped 72 lines |
286 | 286 | | | `&` | 按位与运算符 | int | |
287 | 287 | | | `\|` | 按位或运算符 | int | |
288 | 288 | | | `^` | 按位异或运算符 | int | |
289 | | - | | `&^` | 位清除(AND NOT) | int | |
| 289 | + | | `&^` | 位清除(AND NOT) | int | |
290 | 290 | | | `<<` | 左移运算符 | int | |
291 | 291 | | | `>>` | 右移运算符 | int | |
292 | 292 | | | `<` | 检查左边值是否小于右边值 | int, float, char, time, string | |
| skipped 1 lines |
294 | 294 | | | `>` | 检查左边值是否大于右边值 | int, float, char, time, string | |
295 | 295 | | | `>=` | 检查左边值是否大于等于右边值 | int, float, char, time, string | |
296 | 296 | | |
297 | | - | ### 三目操作符 |
| 297 | + | ### 三元运算符 |
298 | 298 | | |
299 | | - | VDSL有一个三元条件运算符`(条件表达式)?(true表达式):(false表达式)`。 |
| 299 | + | VDSL有一个三元条件运算符`(条件表达式)?(true表达式):(false表达式)`。 |
300 | 300 | | |
301 | 301 | | ```golang |
302 | 302 | | a := true ? 1 : -1 // a == 1 |
| skipped 26 lines |
329 | 329 | | |
330 | 330 | | 一元运算符具有最高优先级,三元运算符具有最低优先级。二进制运算符有五个优先级。 |
331 | 331 | | |
332 | | - | 乘法运算符绑定最强,其次是加法运算符,比较运算符,“&&”(逻辑AND),最后是“||”(逻辑OR): |
| 332 | + | 乘法运算符绑定最强,其次是加法运算符,比较运算符,“&&”(逻辑AND),最后是“||”(逻辑OR): |
333 | 333 | | |
334 | 334 | | | 优先级 | 操作符 | |
335 | 335 | | | :---: | :---: | |
| skipped 7 lines |
343 | 343 | | |
344 | 344 | | ### 选择器和索引器 |
345 | 345 | | |
346 | | - | 可以使用选择器(`.`)和索引器(`[]`)运算符来读取或写入复合类型(数组、映射、字符串、字节)的元素。 |
| 346 | + | 可以使用选择器(`.`)和索引器(`[]`)运算符来读取或写入复合类型(数组、映射、字符串、字节)的元素。 |
347 | 347 | | |
348 | 348 | | ```golang |
349 | 349 | | ["one", "two", "three"][1] // == "two" |
| skipped 86 lines |
436 | 436 | | |
437 | 437 | | VDSL中新增了“For In”语句。它类似于Go的“for range”语句。 |
438 | 438 | | |
439 | | - | “For In”语句可以迭代任何可迭代的值类型(数组、映射、字节、字符串、nil)。 |
| 439 | + | “For In”语句可以迭代任何可迭代的值类型(数组、映射、字节、字符串、nil)。 |
440 | 440 | | |
441 | 441 | | ```golang |
442 | 442 | | for v in [1, 2, 3] { // array: element |
| skipped 31 lines |
474 | 474 | | ``` |
475 | 475 | | |
476 | 476 | | 默认情况下,“import”将模块文件缺少的扩展名解决为"`.dsl`"[^note]。 |
477 | | - | 因此,“sum:=import("./sum")”相当于“sum:=import("./sum.dsl")”。 |
| 477 | + | 因此,“sum:=import("./sum")”相当于“sum:=import("./sum.dsl")”。 |
478 | 478 | | |
479 | 479 | | [^note]: |
480 | 480 | | 如果在Go中使用VDSL作为库,则可以自定义文件扩展名“`.dsl`”。在这种情况下,请使用“Compiler”类型的“SetImportFileExt”函数。 |
| skipped 5 lines |
486 | 486 | | - 模块可以返回“导出”任何类型的值:int、map、function等。 |
487 | 487 | | - 模块中的export类似于函数中的return:它停止执行并导入代码返回一个值。 |
488 | 488 | | - `export`的值总是常量。 |
489 | | - | - 如果模块没有任何“export”语句,则“import”表达式只返回“nil”_(就像没有“return”的函数一样。)_ |
| 489 | + | - 如果模块没有任何“export”语句,则“import”表达式只返回“nil”_(就像没有“return”的函数一样。)_ |
490 | 490 | | - 请注意,如果代码作为主模块执行,则“export”语句将被完全忽略,并且不会进行求值。 |
491 | 491 | | |
492 | 492 | | 此外,您还可以使用“import”表达式来加载标准库。 |
| skipped 5 lines |
498 | 498 | | |
499 | 499 | | ## Comments |
500 | 500 | | |
501 | | - | 与Go一样,VDSL支持行注释(`//…`)和块注释(`/* ... */`). |
| 501 | + | 与Go一样,VDSL支持行注释(`//…`)和块注释(`/* ... */`). |
502 | 502 | | |
503 | 503 | | ```golang |
504 | 504 | | /* |
| skipped 24 lines |