[{"data":1,"prerenderedAt":828},["ShallowReactive",2],{"navigation":3,"-design-functions-and-calls":239,"-design-functions-and-calls-surround":825},[4,159],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"指南","\u002Fguide","00.guide\u002F00.index",[9,11,16,21,53,84,116,142],{"title":5,"path":6,"stem":7,"icon":10},"lucide:book",{"title":12,"path":13,"stem":14,"icon":15},"快速开始","\u002Fguide\u002Fgetting-started","00.guide\u002F01.getting-started","lucide:rocket",{"title":17,"path":18,"stem":19,"icon":20},"基础语法","\u002Fguide\u002Fbasic-syntax","00.guide\u002F02.basic-syntax","lucide:code-2",{"title":22,"path":23,"stem":24,"children":25,"icon":27},"数据类型","\u002Fguide\u002Fdata-types","00.guide\u002F03.data-types\u002F00.index",[26,28,33,38,43,48],{"title":22,"path":23,"stem":24,"icon":27},"lucide:database",{"title":29,"path":30,"stem":31,"icon":32},"基本类型","\u002Fguide\u002Fdata-types\u002Fbasic_types","00.guide\u002F03.data-types\u002F01.basic_types","lucide:type",{"title":34,"path":35,"stem":36,"icon":37},"复合类型","\u002Fguide\u002Fdata-types\u002Fcomposite_types","00.guide\u002F03.data-types\u002F02.composite_types","lucide:layers",{"title":39,"path":40,"stem":41,"icon":42},"类型推导","\u002Fguide\u002Fdata-types\u002Ftype_inference","00.guide\u002F03.data-types\u002F03.type_inference","lucide:brain-circuit",{"title":44,"path":45,"stem":46,"icon":47},"结构体","\u002Fguide\u002Fdata-types\u002Fstruct","00.guide\u002F03.data-types\u002F04.struct","lucide:box-select",{"title":49,"path":50,"stem":51,"icon":52},"内建类型表面","\u002Fguide\u002Fdata-types\u002Fbuilt-in-surface","00.guide\u002F03.data-types\u002F05.built-in-surface","lucide:wrench",{"title":54,"path":55,"stem":56,"children":57,"icon":59},"流程控制","\u002Fguide\u002Fcontrol-flow","00.guide\u002F04.control-flow\u002F00.index",[58,60,64,69,74,79],{"title":54,"path":55,"stem":56,"icon":59},"lucide:git-branch",{"title":61,"path":62,"stem":63,"icon":59},"if 表达式","\u002Fguide\u002Fcontrol-flow\u002Fif-expressions","00.guide\u002F04.control-flow\u002F01.if-expressions",{"title":65,"path":66,"stem":67,"icon":68},"for 循环","\u002Fguide\u002Fcontrol-flow\u002Ffor-loops","00.guide\u002F04.control-flow\u002F02.for-loops","lucide:repeat",{"title":70,"path":71,"stem":72,"icon":73},"break 和 continue","\u002Fguide\u002Fcontrol-flow\u002Fbreak-continue","00.guide\u002F04.control-flow\u002F03.break-continue","lucide:skip-forward",{"title":75,"path":76,"stem":77,"icon":78},"return","\u002Fguide\u002Fcontrol-flow\u002Freturn","00.guide\u002F04.control-flow\u002F04.return","lucide:corner-up-left",{"title":80,"path":81,"stem":82,"icon":83},"注意事项","\u002Fguide\u002Fcontrol-flow\u002Fnotes","00.guide\u002F04.control-flow\u002F05.notes","lucide:alert-triangle",{"title":85,"path":86,"stem":87,"children":88,"icon":90},"函数","\u002Fguide\u002Ffunctions","00.guide\u002F05.functions\u002F00.index",[89,91,96,101,106,111],{"title":85,"path":86,"stem":87,"icon":90},"lucide:braces",{"title":92,"path":93,"stem":94,"icon":95},"基础函数","\u002Fguide\u002Ffunctions\u002Fbasic-functions","00.guide\u002F05.functions\u002F01.basic-functions","lucide:function-square",{"title":97,"path":98,"stem":99,"icon":100},"参数与默认值","\u002Fguide\u002Ffunctions\u002Fadvanced-parameters","00.guide\u002F05.functions\u002F02.advanced-parameters","lucide:settings-2",{"title":102,"path":103,"stem":104,"icon":105},"匿名函数","\u002Fguide\u002Ffunctions\u002Fclosures","00.guide\u002F05.functions\u002F03.closures","lucide:curly-braces",{"title":107,"path":108,"stem":109,"icon":110},"内建函数","\u002Fguide\u002Ffunctions\u002Fbuiltin-functions","00.guide\u002F05.functions\u002F04.builtin-functions","lucide:box",{"title":112,"path":113,"stem":114,"icon":115},"main 函数","\u002Fguide\u002Ffunctions\u002Fmain-function","00.guide\u002F05.functions\u002F05.main-function","lucide:play",{"title":117,"path":118,"stem":119,"children":120,"icon":37},"模块化","\u002Fguide\u002Fmodules","00.guide\u002F06.modules\u002F00.index",[121,122,127,132,137],{"title":117,"path":118,"stem":119,"icon":37},{"title":123,"path":124,"stem":125,"icon":126},"导出","\u002Fguide\u002Fmodules\u002Fexport","00.guide\u002F06.modules\u002F01.export","lucide:upload",{"title":128,"path":129,"stem":130,"icon":131},"导入","\u002Fguide\u002Fmodules\u002Fimport","00.guide\u002F06.modules\u002F02.import","lucide:download",{"title":133,"path":134,"stem":135,"icon":136},"最佳实践","\u002Fguide\u002Fmodules\u002Fbest-practices","00.guide\u002F06.modules\u002F03.best-practices","lucide:check-circle-2",{"title":138,"path":139,"stem":140,"icon":141},"完整示例","\u002Fguide\u002Fmodules\u002Fcomplete-example","00.guide\u002F06.modules\u002F04.complete-example","lucide:file-code-2",{"title":143,"path":144,"stem":145,"children":146,"icon":148},"高级特性概述","\u002Fguide\u002Fadvanced","00.guide\u002F07.advanced\u002F00.index",[147,149,154],{"title":143,"path":144,"stem":145,"icon":148},"lucide:zap",{"title":150,"path":151,"stem":152,"icon":153},"泛型","\u002Fguide\u002Fadvanced\u002Fgenerics","00.guide\u002F07.advanced\u002F05.generics","lucide:git-merge",{"title":155,"path":156,"stem":157,"icon":158},"类型转换","\u002Fguide\u002Fadvanced\u002Ftype-conversion","00.guide\u002F07.advanced\u002F06.type-conversion","lucide:refresh-cw",{"title":160,"path":161,"stem":162,"children":163,"icon":15},"设计","\u002Fdesign","01.design\u002F00.index",[164,165,169,173,177,181,185,189,193,197,201,205,209,213,217,221,225,229,232,235],{"title":160,"path":161,"stem":162,"icon":15},{"title":166,"path":167,"stem":168},"CST 特性","\u002Fdesign\u002Fcst-features","01.design\u002F01.cst-features",{"title":170,"path":171,"stem":172},"注释关联规则","\u002Fdesign\u002Fcomment-association","01.design\u002F02.comment-association",{"title":174,"path":175,"stem":176},"错误处理","\u002Fdesign\u002Ferror-handling","01.design\u002F03.error-handling",{"title":178,"path":179,"stem":180},"代码优化","\u002Fdesign\u002Foptimization","01.design\u002F04.optimization",{"title":182,"path":183,"stem":184},"注释保留","\u002Fdesign\u002Fcomments","01.design\u002F05.comments",{"title":186,"path":187,"stem":188},"结构体设计","\u002Fdesign\u002Fstruct-design","01.design\u002F06.struct-design",{"title":190,"path":191,"stem":192},"comparable 约束设计","\u002Fdesign\u002Fcomparable-constraint","01.design\u002F07.comparable-constraint",{"title":194,"path":195,"stem":196},"文档分层约定","\u002Fdesign\u002Fdocumentation-convention","01.design\u002F08.documentation-convention",{"title":198,"path":199,"stem":200},"类型系统总纲","\u002Fdesign\u002Ftype-system","01.design\u002F09.type-system",{"title":202,"path":203,"stem":204},"泛型系统","\u002Fdesign\u002Fgenerics-system","01.design\u002F10.generics-system",{"title":206,"path":207,"stem":208},"值语义与共享语义","\u002Fdesign\u002Fvalue-and-sharing-semantics","01.design\u002F11.value-and-sharing-semantics",{"title":210,"path":211,"stem":212},"函数与调用","\u002Fdesign\u002Ffunctions-and-calls","01.design\u002F12.functions-and-calls",{"title":214,"path":215,"stem":216},"表达式与语句","\u002Fdesign\u002Fexpressions-and-statements","01.design\u002F13.expressions-and-statements",{"title":218,"path":219,"stem":220},"模块系统","\u002Fdesign\u002Fmodule-system","01.design\u002F14.module-system",{"title":222,"path":223,"stem":224},"渲染内建","\u002Fdesign\u002Frender-intrinsics","01.design\u002F15.render-intrinsics",{"title":226,"path":227,"stem":228},"Any 设计","\u002Fdesign\u002Fany-design","01.design\u002F16.any-design",{"title":49,"path":230,"stem":231},"\u002Fdesign\u002Fbuilt-in-types-surface","01.design\u002F17.built-in-types-surface",{"title":107,"path":233,"stem":234},"\u002Fdesign\u002Fbuilt-in-functions","01.design\u002F18.built-in-functions",{"title":236,"path":237,"stem":238},"内建结构体与运行时类型","\u002Fdesign\u002Fbuilt-in-structs-and-runtime-types","01.design\u002F19.built-in-structs-and-runtime-types",{"id":240,"title":210,"body":241,"description":286,"extension":820,"meta":821,"navigation":822,"path":211,"seo":823,"stem":212,"__hash__":824},"content\u002F01.design\u002F12.functions-and-calls.md",{"type":242,"value":243,"toc":801},"minimark",[244,248,252,274,277,280,310,313,324,326,329,332,351,354,370,372,405,408,426,429,432,437,446,449,466,470,479,481,498,501,507,513,515,524,527,552,555,583,586,589,600,602,617,620,635,638,650,653,656,673,676,681,690,717,720,723,757,764,770,773,786,797],[245,246,247],"p",{},"本文档收敛 Dujie 中函数声明、参数模型、默认值和调用规则。",[249,250,251],"h2",{"id":251},"总体原则",[253,254,255,259,262,265,268,271],"ul",{},[256,257,258],"li",{},"函数返回类型必须显式写出",[256,260,261],{},"第一阶段不做函数返回类型推导",[256,263,264],{},"第一阶段不把完整“函数类型”纳入公开类型系统",[256,266,267],{},"第一阶段支持匿名函数",[256,269,270],{},"匿名函数允许捕获外部变量",[256,272,273],{},"但匿名函数暂不作为完整一等函数值开放",[249,275,276],{"id":276},"函数声明",[245,278,279],{},"函数声明形式：",[281,282,287],"pre",{"className":283,"code":284,"language":285,"meta":286,"style":286},"language-dj shiki shiki-themes github-light github-dark github-dark","func add(x: int, y: int) -> int {\n    x + y\n}\n","dj","",[288,289,290,298,304],"code",{"__ignoreMap":286},[291,292,295],"span",{"class":293,"line":294},"line",1,[291,296,297],{},"func add(x: int, y: int) -> int {\n",[291,299,301],{"class":293,"line":300},2,[291,302,303],{},"    x + y\n",[291,305,307],{"class":293,"line":306},3,[291,308,309],{},"}\n",[245,311,312],{},"约束：",[253,314,315,318,321],{},[256,316,317],{},"本文当前只收敛顶层函数",[256,319,320],{},"返回类型必须显式写出",[256,322,323],{},"普通函数和组件函数共用同一套声明语法",[249,325,102],{"id":102},[245,327,328],{},"匿名函数语法与普通函数一致，只是没有名字。",[245,330,331],{},"例如：",[281,333,335],{"className":283,"code":334,"language":285,"meta":286,"style":286},"func(x: int) -> string {\n    `#${x}`\n}\n",[288,336,337,342,347],{"__ignoreMap":286},[291,338,339],{"class":293,"line":294},[291,340,341],{},"func(x: int) -> string {\n",[291,343,344],{"class":293,"line":300},[291,345,346],{},"    `#${x}`\n",[291,348,349],{"class":293,"line":306},[291,350,309],{},[245,352,353],{},"当前规则：",[253,355,356,358,361,364,367],{},[256,357,270],{},[256,359,360],{},"使用词法作用域",[256,362,363],{},"不需要单独的 capture list",[256,365,366],{},"匿名函数本身不声明泛型参数",[256,368,369],{},"主要用于“目标参数类型已知”的回调位置",[245,371,331],{},[281,373,375],{"className":283,"code":374,"language":285,"meta":286,"style":286},"let prefix = \"item: \";\n\nitems.map(func(x: string) -> string {\n    `${prefix}${x}`\n})\n",[288,376,377,382,388,393,399],{"__ignoreMap":286},[291,378,379],{"class":293,"line":294},[291,380,381],{},"let prefix = \"item: \";\n",[291,383,384],{"class":293,"line":300},[291,385,387],{"emptyLinePlaceholder":386},true,"\n",[291,389,390],{"class":293,"line":306},[291,391,392],{},"items.map(func(x: string) -> string {\n",[291,394,396],{"class":293,"line":395},4,[291,397,398],{},"    `${prefix}${x}`\n",[291,400,402],{"class":293,"line":401},5,[291,403,404],{},"})\n",[245,406,407],{},"第一阶段先不支持：",[253,409,410,413,416,423],{},[256,411,412],{},"把匿名函数当普通值赋给变量",[256,414,415],{},"把匿名函数作为普通返回值返回",[256,417,418,419,422],{},"把匿名函数存入 ",[288,420,421],{},"struct"," 字段或容器",[256,424,425],{},"在匿名函数里修改捕获的外部绑定",[249,427,428],{"id":428},"参数声明形式",[245,430,431],{},"第一阶段支持两种参数模型：",[433,434,436],"h3",{"id":435},"_1-位置参数","1. 位置参数",[281,438,440],{"className":283,"code":439,"language":285,"meta":286,"style":286},"func a(x: int, y: opt\u003Cstring>, z: bool = false) -> widget\n",[288,441,442],{"__ignoreMap":286},[291,443,444],{"class":293,"line":294},[291,445,439],{},[245,447,448],{},"规则：",[253,450,451,454,457,463],{},[256,452,453],{},"参数按顺序声明和传递",[256,455,456],{},"必填参数必须放在前面",[256,458,459,462],{},[288,460,461],{},"opt\u003CT>"," 参数可放在后面并允许省略",[256,464,465],{},"带默认值的参数必须放在后面并允许省略",[433,467,469],{"id":468},"_2-具名参数","2. 具名参数",[281,471,473],{"className":283,"code":472,"language":285,"meta":286,"style":286},"func b({ x: int, y: opt\u003Cstring> = none, z: bool = false }) -> widget\n",[288,474,475],{"__ignoreMap":286},[291,476,477],{"class":293,"line":294},[291,478,472],{},[245,480,448],{},[253,482,483,490,495],{},[256,484,485,486,489],{},"只在定义时使用 ",[288,487,488],{},"{ ... }"," 标识具名参数函数",[256,491,492,493],{},"调用时不写 ",[288,494,488],{},[256,496,497],{},"调用时按参数名匹配，顺序无关",[245,499,500],{},"第一阶段不支持位置参数和具名参数在同一函数签名中混用。",[249,502,504,506],{"id":503},"optt-与参数可省略",[288,505,461],{}," 与参数可省略",[245,508,509,510,512],{},"参数可选性统一由 ",[288,511,461],{}," 表达。",[245,514,331],{},[281,516,518],{"className":283,"code":517,"language":285,"meta":286,"style":286},"func button(title: opt\u003Cstring>) -> widget\n",[288,519,520],{"__ignoreMap":286},[291,521,522],{"class":293,"line":294},[291,523,517],{},[245,525,526],{},"这些调用都合法：",[281,528,530],{"className":283,"code":529,"language":285,"meta":286,"style":286},"button()\nbutton(\"OK\")\nbutton(some(\"OK\"))\nbutton(none)\n",[288,531,532,537,542,547],{"__ignoreMap":286},[291,533,534],{"class":293,"line":294},[291,535,536],{},"button()\n",[291,538,539],{"class":293,"line":300},[291,540,541],{},"button(\"OK\")\n",[291,543,544],{"class":293,"line":306},[291,545,546],{},"button(some(\"OK\"))\n",[291,548,549],{"class":293,"line":395},[291,550,551],{},"button(none)\n",[245,553,554],{},"语义：",[253,556,557,566,576],{},[256,558,559,562,563],{},[288,560,561],{},"button()"," 等价于 ",[288,564,565],{},"button(none)",[256,567,568,569,572,573],{},"传入 ",[288,570,571],{},"T"," 时，自动提升为 ",[288,574,575],{},"some(T)",[256,577,578,579,582],{},"显式传 ",[288,580,581],{},"none"," 时，参数值为空",[249,584,585],{"id":585},"默认值",[245,587,588],{},"默认值规则：",[253,590,591,594,597],{},[256,592,593],{},"默认值必须是编译期可确定表达式",[256,595,596],{},"默认值暂时不允许依赖前面的参数",[256,598,599],{},"如果默认值能唯一推导出参数类型，参数类型可以省略",[245,601,331],{},[281,603,605],{"className":283,"code":604,"language":285,"meta":286,"style":286},"func a(x = 1, y = \"snow\") -> unit\nfunc b({ x = 1, y: opt\u003Cstring> = none }) -> unit\n",[288,606,607,612],{"__ignoreMap":286},[291,608,609],{"class":293,"line":294},[291,610,611],{},"func a(x = 1, y = \"snow\") -> unit\n",[291,613,614],{"class":293,"line":300},[291,615,616],{},"func b({ x = 1, y: opt\u003Cstring> = none }) -> unit\n",[245,618,619],{},"这些不合法：",[281,621,623],{"className":283,"code":622,"language":285,"meta":286,"style":286},"func a(x: int, y = x) -> int\nfunc b(v = none) -> unit\n",[288,624,625,630],{"__ignoreMap":286},[291,626,627],{"class":293,"line":294},[291,628,629],{},"func a(x: int, y = x) -> int\n",[291,631,632],{"class":293,"line":300},[291,633,634],{},"func b(v = none) -> unit\n",[245,636,637],{},"原因：",[253,639,640,643],{},[256,641,642],{},"默认值不能依赖前面的参数",[256,644,645,647,648],{},[288,646,581],{}," 不能单独推出参数类型，必须显式写成 ",[288,649,461],{},[249,651,652],{"id":652},"调用规则",[433,654,655],{"id":655},"位置参数函数",[253,657,658,661,667,670],{},[256,659,660],{},"实参按顺序匹配",[256,662,663,664,666],{},"尾部 ",[288,665,461],{}," 参数可省略",[256,668,669],{},"尾部带默认值参数可省略",[256,671,672],{},"不允许跳过中间参数",[433,674,675],{"id":675},"具名参数函数",[253,677,678],{},[256,679,680],{},"调用形式：",[281,682,684],{"className":283,"code":683,"language":285,"meta":286,"style":286},"b(x: 1, y: some(\"snow\"))\n",[288,685,686],{"__ignoreMap":286},[291,687,688],{"class":293,"line":294},[291,689,683],{},[253,691,692,695,701,708,711,714],{},[256,693,694],{},"顺序无关",[256,696,697,698,700],{},"未给默认值的非 ",[288,699,461],{}," 参数必填",[256,702,703,705,706],{},[288,704,461],{}," 参数可不传，不传时为 ",[288,707,581],{},[256,709,710],{},"带默认值的参数可不传，不传时取默认值",[256,712,713],{},"未声明参数是编译错误",[256,715,716],{},"同名参数重复传递是编译错误",[249,718,719],{"id":719},"返回",[245,721,722],{},"返回规则：",[253,724,725,731,741,749,752],{},[256,726,727,730],{},[288,728,729],{},"return expr;"," 的类型必须与函数声明返回类型一致",[256,732,733,734,737,738],{},"返回 ",[288,735,736],{},"unit"," 的函数允许写 ",[288,739,740],{},"return;",[256,742,743,744,746,747],{},"非 ",[288,745,736],{}," 函数不能写裸 ",[288,748,740],{},[256,750,751],{},"函数体末尾的尾表达式可以作为隐式返回值",[256,753,743,754,756],{},[288,755,736],{}," 函数的所有控制路径都必须返回值",[249,758,760,763],{"id":759},"func-的当前边界",[288,761,762],{},"func"," 的当前边界",[245,765,766,767,769],{},"第一阶段的 ",[288,768,762],{}," 只承担“声明和调用函数”的能力。",[245,771,772],{},"当前不支持：",[253,774,775,778,783],{},[256,776,777],{},"函数作为普通变量类型使用",[256,779,780,781,422],{},"函数存入 ",[288,782,421],{},[256,784,785],{},"完整高阶函数类型系统",[245,787,788,789,792,793,796],{},"少数内建场景可以接受具名函数或匿名函数作为回调，例如后续 ",[288,790,791],{},"iter.map"," \u002F ",[288,794,795],{},"iter.filter","。",[798,799,800],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":286,"searchDepth":300,"depth":300,"links":802},[803,804,805,806,810,812,813,817,818],{"id":251,"depth":300,"text":251},{"id":276,"depth":300,"text":276},{"id":102,"depth":300,"text":102},{"id":428,"depth":300,"text":428,"children":807},[808,809],{"id":435,"depth":306,"text":436},{"id":468,"depth":306,"text":469},{"id":503,"depth":300,"text":811},"opt\u003CT> 与参数可省略",{"id":585,"depth":300,"text":585},{"id":652,"depth":300,"text":652,"children":814},[815,816],{"id":655,"depth":306,"text":655},{"id":675,"depth":306,"text":675},{"id":719,"depth":300,"text":719},{"id":759,"depth":300,"text":819},"func 的当前边界","md",{},{},{"title":210,"description":286},"RC0DYYVjjX1T59_swJBD3hHqqLmSyYJhDTGVg2FzzPg",[826,827],{"title":206,"path":207,"stem":208,"description":286,"children":-1},{"title":214,"path":215,"stem":216,"description":286,"children":-1},1776981319057]