递归火山软件开发平台

标题: 计次循环()应该增加个不会重复调用循环次数的计次循环2() [打印本页]

作者: shuimiao    时间: 4 天前
标题: 计次循环()应该增加个不会重复调用循环次数的计次循环2()
本帖最后由 shuimiao 于 2025-6-10 16:26 编辑

就是他计次循环传入的循环次数,如果是个方法返回值,他每循环一次都会执行一次方法,增加消耗不说,还会可能每次返回结果不一样,导致最终循环次数不确定。如果每次都要自己先将方法返回值给一个变量再传入计次循环就麻烦了,计次循环是高频使用的。所以,只要增加个计次循环2,稍微改动下代码,他就只会执行一次获取循环次数。
  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 方法 计次循环 <公开 静态 注释 = "将子语句体循环指定所指定的次数." 注释 = "在子语句体中,可以使用"取循环索引"方法取回当前循环索引值(0到"循环次数"参数值-1)."
  3.         @嵌入式方法 = "name = counter\r\nhas_loop_body = true">
  4. 参数 循环次数 <类型 = 整数 编辑时信息 = "11AA99, 0, 0, 0">
  5. {
  6.     @ for (INT_P __vol_counter_index = 0; __vol_counter_index < @<循环次数>; __vol_counter_index++)
  7. }
复制代码
  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 方法 计次循环2 <公开 静态 注释 = "将子语句体循环指定所指定的次数." 注释 = "在子语句体中,可以使用"取循环索引"方法取回当前循环索引值(0到"循环次数"参数值-1)."
  3.         @嵌入式方法 = "name = counter\r\nhas_loop_body = true">
  4. 参数 循环次数 <类型 = 整数 编辑时信息 = "11AA99, 0, 0, 0">
  5. {
  6.     @ int i=@<循环次数>; for (INT_P __vol_counter_index = 0; __vol_counter_index < i; __vol_counter_index++)
  7. }
复制代码

我自己能改,可是在官方库文件里改,下次升级就尴尬了。把改动代码放自己文件,那他配套的取循环索引()也要搞一个,我只想改计次循环2(),其他配套的方法照旧。



作者: shuimiao    时间: 4 天前
本帖最后由 shuimiao 于 2025-6-10 22:32 编辑

忽略本楼,看置顶回复
作者: 乐易论坛    时间: 4 天前
我是觉得 易语言的计次循环就挺好的 可能内部处理了很多东西吧  不行就用循环 就好了
作者: 小蜗牛    时间: 4 天前
这样并不行,两个循环的话会报错声明了两个i变量,要多添加一个作用域才可以~
作者: Xelloss0618    时间: 4 天前
  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 方法 计次循环2 <公开 静态 @嵌入式方法 = "name = counter\r\nhas_loop_body = true">
  3. 参数 循环次数 <类型 = 整数 编辑时信息 = "11AA99, 0, 0, 0">
  4. {
  5.     @ for (INT_P __vol_counter_index = 0, __vol_counter_taget = @<循环次数>; __vol_counter_index < __vol_counter_taget; __vol_counter_index++)
  6. }
复制代码

作者: hcwanz    时间: 4 天前
在for里面就行吧, for(size_t i = 0, ii = @<循环变量>; i < ii; i++)
作者: 创世魂    时间: 4 天前
Xelloss0618 发表于 2025-6-10 17:53

+1
作者: shuimiao    时间: 4 天前
Xelloss0618 发表于 2025-6-10 17:53

谢谢大佬
作者: shuimiao    时间: 4 天前
小蜗牛 发表于 2025-6-10 17:44
这样并不行,两个循环的话会报错声明了两个i变量,要多添加一个作用域才可以~ ...

说得对,谢谢提醒
作者: htpmcj    时间: 4 天前
循环()也是同样的问题
作者: shuimiao    时间: 4 天前
参考各位指点,我搞出了一个方法,定向计次循环,是否逆向直接在第二个参数中设置为真,并且还额外支持取回计次总数、计次初始值

<火山程序 类型 = "通常" 版本 = 1 />

方法 定向计次循环 <公开 静态 注释 = "根据条件来决定是正向计次还是逆向计次。将子语句体循环指定所指定的次数."
        注释 = "在子语句体中,可以使用\"取循环值\"方法取回当前循环索引值(0到\"循环次数\"参数值-1)." 注释 = "在子语句体中,可以使用\"取循环数\"方法取回当前循环次数"
        注释 = "在子语句体中,可以使用\"取循环初值\"方法取回当前循环一开始的循环索引值(逆向时是循环次数-1否则是0)" 折叠
        @嵌入式方法 = "name = counter\r\nhas_loop_body = true">
参数 循环次数 <类型 = 整数 编辑时信息 = "11AA99, 0, 0, 0">
参数 逆向 <类型 = 逻辑型 注释 = "假为正向,真则为逆向" @默认值 = 假>
{
    @ for (INT nx = @<逆向>?1:0, __vol_counter_sum_sm = @<循环次数>,  __vol_counter_index_sm = nx?__vol_counter_sum_sm - 1:0; nx?__vol_counter_index_sm >= 0: __vol_counter_index_sm < __vol_counter_sum_sm;nx?__vol_counter_index_sm--: __vol_counter_index_sm++)
}

方法 取循环值 <公开 静态 类型 = 整数 注释 = "  只能在\"正向计次\"/\"逆向计次\"语句的子语句体中使用,用作取回当前循环索引值,"
        注释 = "所取回的值范围为从0到\"正向计次\"调用语句中所指定的\"循环次数\"参数值-1."
        注释 = "  如果有多层\"正向计次\"/\"逆向计次\"嵌套,本方法将返回所处最近层\"正向计次\"/" 注释 = "\"逆向计次\"的索引值." 折叠
        @嵌入式方法 = "parent = \"counter\"">
{
    @ __vol_counter_index_sm
}

方法 取循环数 <公开 静态 类型 = 整数 注释 = "  只能在\"正向计次\"/\"逆向计次\"语句的子语句体中使用,用作取回当前循环总数" 折叠
        @嵌入式方法 = "parent = \"counter\"">
{
    @ __vol_counter_sum_sm
}

方法 取循环初值 <公开 静态 类型 = 整数 注释 = "  只能在\"正向计次\"/\"逆向计次\"语句的子语句体中使用,用作取回当前循环的初始值" 折叠
        @嵌入式方法 = "parent = \"counter\"">
{
    @ nx?__vol_counter_sum_sm-1:0
}

作者: 000    时间: 3 天前
谢谢大佬,学习了
作者: ku2017    时间: 3 天前
我也踩过这个坑




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4