如何在前提条件下迭代数组?
How to iterate array in precondition?
我想在前提条件下循环访问数组。
但似乎前提条件部分不允许使用 "from" 和 "across" 语法。
有没有办法在前提条件下遍历数组?
insert_last (s: STRING)
require
new_is_longer_than_prevs:
-- here I want to iterate through array "arr" and if length of s is longer than all other previously stored string values in array
do
arr.force (s, arr.upper + 1)
end
您可以在前置条件和后置条件中使用 'across ... as ... all ... end' 或 'across ... as ... some ... end'。 'all' 版本用于在每次迭代的条件为真时有效,而 'some' 版本用于在至少一次迭代的条件为真时有效。您可以在代码中使用类似这样的东西:
insert_last (s: STRING)
require
new_is_longer_than_prevs:
across arr.lower |..| arr.upper as la_index all s.count > arr[la_index.item].count end
do
arr.force (s, arr.upper + 1)
end
其他回复中建议的版本在大多数情况下都有效(它假定数组的较低索引为 1)。但是,可以直接在数组上而不是在它的索引范围上使用跨循环:
new_is_longer_than_prevs:
across arr as c all s.count > c.item.count end
此版本适用于任何较低的索引,并且在 运行 时效率稍高。
我想在前提条件下循环访问数组。 但似乎前提条件部分不允许使用 "from" 和 "across" 语法。
有没有办法在前提条件下遍历数组?
insert_last (s: STRING)
require
new_is_longer_than_prevs:
-- here I want to iterate through array "arr" and if length of s is longer than all other previously stored string values in array
do
arr.force (s, arr.upper + 1)
end
您可以在前置条件和后置条件中使用 'across ... as ... all ... end' 或 'across ... as ... some ... end'。 'all' 版本用于在每次迭代的条件为真时有效,而 'some' 版本用于在至少一次迭代的条件为真时有效。您可以在代码中使用类似这样的东西:
insert_last (s: STRING)
require
new_is_longer_than_prevs:
across arr.lower |..| arr.upper as la_index all s.count > arr[la_index.item].count end
do
arr.force (s, arr.upper + 1)
end
其他回复中建议的版本在大多数情况下都有效(它假定数组的较低索引为 1)。但是,可以直接在数组上而不是在它的索引范围上使用跨循环:
new_is_longer_than_prevs:
across arr as c all s.count > c.item.count end
此版本适用于任何较低的索引,并且在 运行 时效率稍高。