Lasso lang 在套索9中,是否存在field方法的-recordindex参数?选择?
在旧的Lasso 8代码中,我经常在条件中使用字段'foo',-recordindex=loop_count-1,以在记录之间更改值时显示表中的标题行 在套索9中,-recordindex参数似乎被忽略。它也没有文档记录 我的第一个解决方法是在每次记录迭代时设置一个变量,并将当前记录的字段与该值进行比较Lasso lang 在套索9中,是否存在field方法的-recordindex参数?选择?,lasso-lang,Lasso Lang,在旧的Lasso 8代码中,我经常在条件中使用字段'foo',-recordindex=loop_count-1,以在记录之间更改值时显示表中的标题行 在套索9中,-recordindex参数似乎被忽略。它也没有文档记录 我的第一个解决方法是在每次记录迭代时设置一个变量,并将当前记录的字段与该值进行比较 <?= var('lastSortFieldValue') = null ?> [records] [if(field('sortField') != $lastSortFi
<?= var('lastSortFieldValue') = null ?>
[records]
[if(field('sortField') != $lastSortFieldValue)]
<!-- display header -->
[/if]
<!-- display row -->
<?= $lastSortFieldValue = field('sortField') =>
[/records]
这里有关于最佳实践的建议吗 设置变量的变通方法可能是最好的选择。虽然我会将其设置为局部变量而不是线程变量,因为它可能不需要线程作用域 如果您真的需要一个方法来实现字段…-recordIndex过去的功能,那么这里有一个方法:
define fieldFromRow(field::string, row::integer) => {
local(curMap = inline_scopeGet)
!#curMap || #curMap->size == 0? return null;
local(stashRow) = #curMap->find(::currentrow)
handle => {
#curMap->insert(::currentrow = #stashRow)
}
#curMap->insert(::currentrow = #curMap->find(::currentset)->get(INLINE_RESULTROWS_POS)->get(#row))
return column(#field)
}
此方法获取当前的内联信息。然后,它将当前行隐藏起来,并设置一个处理程序,以便在完成所有操作后恢复当前行。然后将当前行设置为方法调用中指定的行,并返回指定字段的值。有点像黑客,但它在我的基本测试中起作用。无论Brads自定义方法多么优雅,我建议不要使用它。它比设置和比较局部变量慢
local(
timer,
loops = 1000,
present_value,
prev_value,
out = string,
result = string
)
inline(-database = 'mysql', -sql = "SELECT * FROM help_category") => {
#timer = micros
loop(#loops) => {
rows => {
#present_value = field('name')
#prev_value != #present_value ? #out -> append('<hr />Here be a new field<br />')
#out -> append(#present_value + '<br />')
#prev_value = #present_value
}
}
#result -> append('Result using local ' + ((micros - #timer) / # loops) + '<br />')
#timer = micros
loop(#loops) => {
rows => {
#present_value = field('name')
loop_count > 1 and #prev_value != fieldFromRow(#present_value, loop_count -1) ? #out -> append('<hr />Here be a new field<br />')
#out -> append(#present_value + '<br />')
}
}
#result -> append('Result using fieldFromRow ' + ((micros - #timer) / # loops) + '<br />')
}
#result
->结果使用本地637
使用第1612行字段的结果非常有帮助!感谢您提供的自定义方法。我把它放在LassoStartup中作为例子,并迅速地将所有旧方法转换为临时新方法。如何找到所有这些秘密类型和方法,如inline\u scopeGet和inline\u RESULTROWS\u POS-我同意Jolle的观点,但是这个解决方案不必要地增加了开销。Justin,你的第一种方法可能是最有效的。我也同意Jolle和Ke的观点-使用这种方法来让事情运转起来,但是如上所述,你使用变量的解决方案是最好的方法。顺便说一句,如果不使用列来获取数据,我的解决方案可能会更快,但这可能会在边缘情况下导致意外的结果。感谢提供更多信息。在Brad自定义方法的实现中,我添加了一个记录使用情况的步骤,以便稍后返回并清理它。现在,它只是一个简单的正则表达式查找和替换,让很多东西开始工作。再次感谢您对此的详细介绍。