diff options
Diffstat (limited to 'doc/docs')
| -rwxr-xr-x | doc/docs/.vuepress/components/YueCompiler.vue | 83 | ||||
| -rwxr-xr-x | doc/docs/doc/README.md | 47 | ||||
| -rwxr-xr-x | doc/docs/zh/doc/README.md | 48 |
3 files changed, 156 insertions, 22 deletions
diff --git a/doc/docs/.vuepress/components/YueCompiler.vue b/doc/docs/.vuepress/components/YueCompiler.vue index 6b6042c..3a22d1c 100755 --- a/doc/docs/.vuepress/components/YueCompiler.vue +++ b/doc/docs/.vuepress/components/YueCompiler.vue | |||
| @@ -1,21 +1,21 @@ | |||
| 1 | <template> | 1 | <template> |
| 2 | <div style="width: 100%; height: auto;"> | 2 | <div style="width: 100%; height: auto;"> |
| 3 | <div class="parent" style="background-color: #f5f7ff;"> | 3 | <div class="parent" style="background-color: #f5f7ff;"> |
| 4 | <div class="childL" style="height: 2.5em;"> | 4 | <div class="editor-section"> |
| 5 | <div class="childTitle">YueScript {{ info }}</div> | 5 | <div class="childTitle">YueScript {{ info }}</div> |
| 6 | <div class="editor-container" ref='yueEditor'> | ||
| 7 | <ClientOnly> | ||
| 8 | <prism-editor class="my-editor" v-model="code" :highlight="highlighterYue" @input="codeChanged($event)" line-numbers :readonly="readonly"></prism-editor> | ||
| 9 | </ClientOnly> | ||
| 10 | </div> | ||
| 6 | </div> | 11 | </div> |
| 7 | <div class="childR" style="height: 2.5em;"> | 12 | <div class="editor-section"> |
| 8 | <div class="childTitle">Lua</div> | 13 | <div class="childTitle">Lua</div> |
| 9 | </div> | 14 | <div class="editor-container"> |
| 10 | <div class="childL" ref='yueEditor' style="height: 30em;"> | 15 | <ClientOnly> |
| 11 | <ClientOnly> | 16 | <prism-editor class="my-editor" v-model="compiled" :highlight="highlighterLua" @input="codeChanged($event)" :line-numbers="isMobileLayout" readonly></prism-editor> |
| 12 | <prism-editor class="my-editor" v-model="code" :highlight="highlighterYue" @input="codeChanged($event)" line-numbers :readonly="readonly"></prism-editor> | 17 | </ClientOnly> |
| 13 | </ClientOnly> | 18 | </div> |
| 14 | </div> | ||
| 15 | <div class="childR" style="height: 30em;"> | ||
| 16 | <ClientOnly> | ||
| 17 | <prism-editor class="my-editor" v-model="compiled" :highlight="highlighterLua" @input="codeChanged($event)" readonly></prism-editor> | ||
| 18 | </ClientOnly> | ||
| 19 | </div> | 19 | </div> |
| 20 | </div> | 20 | </div> |
| 21 | <div v-if="!compileronly"> | 21 | <div v-if="!compileronly"> |
| @@ -57,9 +57,18 @@ | |||
| 57 | code: '', | 57 | code: '', |
| 58 | compiled: '', | 58 | compiled: '', |
| 59 | result: '', | 59 | result: '', |
| 60 | windowWidth: 0, | ||
| 60 | }; | 61 | }; |
| 61 | }, | 62 | }, |
| 63 | computed: { | ||
| 64 | isMobileLayout() { | ||
| 65 | return this.windowWidth <= 768; | ||
| 66 | }, | ||
| 67 | }, | ||
| 62 | mounted () { | 68 | mounted () { |
| 69 | this.windowWidth = window.innerWidth; | ||
| 70 | window.addEventListener('resize', this.handleResize); | ||
| 71 | |||
| 63 | if (this.text !== '') { | 72 | if (this.text !== '') { |
| 64 | this.$data.code = this.text; | 73 | this.$data.code = this.text; |
| 65 | this.codeChanged(this.text); | 74 | this.codeChanged(this.text); |
| @@ -86,7 +95,13 @@ | |||
| 86 | })(this); | 95 | })(this); |
| 87 | check(); | 96 | check(); |
| 88 | }, | 97 | }, |
| 98 | beforeDestroy() { | ||
| 99 | window.removeEventListener('resize', this.handleResize); | ||
| 100 | }, | ||
| 89 | methods: { | 101 | methods: { |
| 102 | handleResize() { | ||
| 103 | this.windowWidth = window.innerWidth; | ||
| 104 | }, | ||
| 90 | runCode() { | 105 | runCode() { |
| 91 | if (window.yue && this.$data.compiled !== '') { | 106 | if (window.yue && this.$data.compiled !== '') { |
| 92 | let res = ''; | 107 | let res = ''; |
| @@ -136,27 +151,35 @@ | |||
| 136 | resize: none; | 151 | resize: none; |
| 137 | margin-top: 5px; | 152 | margin-top: 5px; |
| 138 | } | 153 | } |
| 139 | .childL { | 154 | |
| 140 | float: left; | 155 | .parent { |
| 141 | width: 50%; | 156 | display: flex; |
| 142 | box-sizing: border-box; | 157 | flex-wrap: wrap; |
| 143 | background-clip: content-box; | 158 | width: 100%; |
| 144 | background: #f5f7ff; | ||
| 145 | } | 159 | } |
| 146 | .childR { | 160 | |
| 147 | float: left; | 161 | .editor-section { |
| 148 | width: 50%; | 162 | width: 50%; |
| 149 | box-sizing: border-box; | 163 | box-sizing: border-box; |
| 150 | background-clip: content-box; | ||
| 151 | background: #f5f7ff; | 164 | background: #f5f7ff; |
| 152 | } | 165 | } |
| 166 | |||
| 167 | .editor-container { | ||
| 168 | height: 55vh; | ||
| 169 | } | ||
| 170 | |||
| 153 | .childTitle { | 171 | .childTitle { |
| 154 | width: 100%; | 172 | width: 100%; |
| 155 | font-size: 1.2em; | 173 | font-size: 1.2em; |
| 156 | color: #b7ae8f; | 174 | color: #b7ae8f; |
| 157 | text-align: center; | 175 | text-align: center; |
| 158 | padding: 0.2em; | 176 | padding: 0.2em; |
| 177 | height: 2.5em; | ||
| 178 | display: flex; | ||
| 179 | align-items: center; | ||
| 180 | justify-content: center; | ||
| 159 | } | 181 | } |
| 182 | |||
| 160 | .button { | 183 | .button { |
| 161 | float: right; | 184 | float: right; |
| 162 | border: none; | 185 | border: none; |
| @@ -173,9 +196,11 @@ | |||
| 173 | margin-top: 10px; | 196 | margin-top: 10px; |
| 174 | margin-right: 5px; | 197 | margin-right: 5px; |
| 175 | } | 198 | } |
| 199 | |||
| 176 | .button:hover { | 200 | .button:hover { |
| 177 | background-color: #beb69a; | 201 | background-color: #beb69a; |
| 178 | } | 202 | } |
| 203 | |||
| 179 | .button:focus, | 204 | .button:focus, |
| 180 | .button:active:focus, | 205 | .button:active:focus, |
| 181 | .button.active:focus, | 206 | .button.active:focus, |
| @@ -207,5 +232,19 @@ | |||
| 207 | .my-editor >>> .prism-editor__textarea:focus { | 232 | .my-editor >>> .prism-editor__textarea:focus { |
| 208 | outline: none; | 233 | outline: none; |
| 209 | } | 234 | } |
| 210 | </style> | ||
| 211 | 235 | ||
| 236 | /* 移动端响应式布局 */ | ||
| 237 | @media screen and (max-width: 768px) { | ||
| 238 | .parent { | ||
| 239 | flex-direction: column; | ||
| 240 | } | ||
| 241 | |||
| 242 | .editor-section { | ||
| 243 | width: 100%; | ||
| 244 | } | ||
| 245 | |||
| 246 | .editor-container { | ||
| 247 | height: 30vh; | ||
| 248 | } | ||
| 249 | } | ||
| 250 | </style> | ||
diff --git a/doc/docs/doc/README.md b/doc/docs/doc/README.md index 5b8fc59..57f27c8 100755 --- a/doc/docs/doc/README.md +++ b/doc/docs/doc/README.md | |||
| @@ -2161,6 +2161,53 @@ f2 arg1, arg2 | |||
| 2161 | </pre> | 2161 | </pre> |
| 2162 | </YueDisplay> | 2162 | </YueDisplay> |
| 2163 | 2163 | ||
| 2164 | ### Prefixed Return Expression | ||
| 2165 | |||
| 2166 | When working with deeply nested function bodies, it can be tedious to maintain readability and consistency of the return value. To address this, YueScript introduces the **Prefixed Return Expression** syntax. Its form is as follows: | ||
| 2167 | |||
| 2168 | ```moon | ||
| 2169 | findFirstEven = (list): nil -> | ||
| 2170 | for item in *list | ||
| 2171 | if type(item) == "table" | ||
| 2172 | for sub in *item | ||
| 2173 | if sub % 2 == 0 | ||
| 2174 | return sub | ||
| 2175 | ``` | ||
| 2176 | <YueDisplay> | ||
| 2177 | <pre> | ||
| 2178 | findFirstEven = (list): nil -> | ||
| 2179 | for item in *list | ||
| 2180 | if type(item) == "table" | ||
| 2181 | for sub in *item | ||
| 2182 | if sub % 2 == 0 | ||
| 2183 | return sub | ||
| 2184 | </pre> | ||
| 2185 | </YueDisplay> | ||
| 2186 | |||
| 2187 | This is equivalent to: | ||
| 2188 | |||
| 2189 | ```moon | ||
| 2190 | findFirstEven = (list) -> | ||
| 2191 | for item in *list | ||
| 2192 | if type(item) == "table" | ||
| 2193 | for sub in *item | ||
| 2194 | if sub % 2 == 0 | ||
| 2195 | return sub | ||
| 2196 | nil | ||
| 2197 | ``` | ||
| 2198 | <YueDisplay> | ||
| 2199 | <pre> | ||
| 2200 | findFirstEven = (list) -> | ||
| 2201 | for item in *list | ||
| 2202 | if type(item) == "table" | ||
| 2203 | for sub in *item | ||
| 2204 | if sub % 2 == 0 | ||
| 2205 | return sub | ||
| 2206 | nil | ||
| 2207 | </pre> | ||
| 2208 | </YueDisplay> | ||
| 2209 | |||
| 2210 | The only difference is that you can move the final return expression before the `->` or `=>` token to indicate the function’s implicit return value as the last statement. This way, even in functions with multiple nested loops or conditional branches, you no longer need to write a trailing return expression at the end of the function body, making the logic structure more straightforward and easier to follow. | ||
| 2164 | 2211 | ||
| 2165 | ## Backcalls | 2212 | ## Backcalls |
| 2166 | 2213 | ||
diff --git a/doc/docs/zh/doc/README.md b/doc/docs/zh/doc/README.md index 0aea3d5..5cfe4e6 100755 --- a/doc/docs/zh/doc/README.md +++ b/doc/docs/zh/doc/README.md | |||
| @@ -2121,6 +2121,54 @@ f2 arg1, arg2 | |||
| 2121 | </pre> | 2121 | </pre> |
| 2122 | </YueDisplay> | 2122 | </YueDisplay> |
| 2123 | 2123 | ||
| 2124 | ### 前置返回表达式 | ||
| 2125 | |||
| 2126 | 在深度嵌套的函数体中,为了提升返回值的可读性及编写便利性,我们新增了 “前置返回表达式” 语法。其形式如下: | ||
| 2127 | |||
| 2128 | ```moon | ||
| 2129 | findFirstEven = (list): nil -> | ||
| 2130 | for item in *list | ||
| 2131 | if type(item) == "table" | ||
| 2132 | for sub in *item | ||
| 2133 | if sub % 2 == 0 | ||
| 2134 | return sub | ||
| 2135 | ``` | ||
| 2136 | <YueDisplay> | ||
| 2137 | <pre> | ||
| 2138 | findFirstEven = (list): nil -> | ||
| 2139 | for item in *list | ||
| 2140 | if type(item) == "table" | ||
| 2141 | for sub in *item | ||
| 2142 | if sub % 2 == 0 | ||
| 2143 | return sub | ||
| 2144 | </pre> | ||
| 2145 | </YueDisplay> | ||
| 2146 | |||
| 2147 | 这个写法等价于: | ||
| 2148 | |||
| 2149 | ```moon | ||
| 2150 | findFirstEven = (list) -> | ||
| 2151 | for item in *list | ||
| 2152 | if type(item) == "table" | ||
| 2153 | for sub in *item | ||
| 2154 | if sub % 2 == 0 | ||
| 2155 | return sub | ||
| 2156 | nil | ||
| 2157 | ``` | ||
| 2158 | <YueDisplay> | ||
| 2159 | <pre> | ||
| 2160 | findFirstEven = (list) -> | ||
| 2161 | for item in *list | ||
| 2162 | if type(item) == "table" | ||
| 2163 | for sub in *item | ||
| 2164 | if sub % 2 == 0 | ||
| 2165 | return sub | ||
| 2166 | nil | ||
| 2167 | </pre> | ||
| 2168 | </YueDisplay> | ||
| 2169 | |||
| 2170 | 唯一的区别在于:你可以将函数的返回值表达式提前写在 `->` 或 `=>` 前,用以指示该函数应隐式返回该表达式的值。这样即使在多层循环或条件判断的场景下,也无需编写尾行悬挂的返回表达式,逻辑结构会更加直观清晰。 | ||
| 2171 | |||
| 2124 | ## 反向回调 | 2172 | ## 反向回调 |
| 2125 | 2173 | ||
| 2126 | 反向回调用于减少函数回调的嵌套。它们使用指向左侧的箭头,并且默认会被定义为传入后续函数调用的最后一个参数。它的语法大部分与常规箭头函数相同,只是它指向另一方向,并且后续的函数体不需要进行缩进。 | 2174 | 反向回调用于减少函数回调的嵌套。它们使用指向左侧的箭头,并且默认会被定义为传入后续函数调用的最后一个参数。它的语法大部分与常规箭头函数相同,只是它指向另一方向,并且后续的函数体不需要进行缩进。 |
