尝试在 DOORS DXL 中分配字符串向量时出现范围问题
Scoping problem when trying to assign vector of strings in DOORS DXL
我希望能够将一个选择器值发送到一个函数,并让该函数创建一个值的字符串数组以供后续操作使用。我 运行 遇到的问题是 DXL 规则不会 "see" 在 "if {} " 块内声明的变量,即使我已经保证在所有情况下我的字符串数组都会得到初始化。示例:
string tryme( int thechoice){
string outit
if (thechoice == 1){
outit = "you chose one"
}
else if (thechoice ==2){
outit = "you chose two"
}
else { outit = "bad choice"}
// do a bunch of stuff with "outit" values
return outit
}
// that works, but this doesn't
string trymore( int thechoice){
if (thechoice == 1){
string outit[] = {"you chose one","and one"}
}
else if (thechoice ==2){
string outit[] = {"you chose two","and two", "and three"}
}
else { string outit = "bad choice"}
// do a bunch of stuff with "outit" values
return outit
}
我可以使用动态数组,这样我就可以在 "if{}" 之前声明数组,但是我不得不在每个案例中编写循环,使用 put
来加载数组.
我知道 DXL 的功能有限,但如果有人知道更好的方法,请告诉我。
附加约束
最后,我希望能够从循环中重复调用该函数,每次都更改 "thechoice"。这就是我不能在父脚本中声明字符串数组的原因,因为一旦声明 (string outit[] = {'a','b'}
),DXL 就无法删除数组或调整其大小。
比那更容易,虽然有点违反直觉。我需要在不分配任何东西的情况下声明一个字符串向量,然后生成一个临时字符串向量,然后将我想要的变量设置为等于临时值。像这样:
string trymore( int thechoice){
string outit[]
string whatdone
if (thechoice == 1){
string foo[] = {"you chose one","and one"}
whatdone = "did one"
outit = foo
}
else if (thechoice ==2){
string foo[] = {"you chose two","and two", "and three"}
whatdone = "did two"
outit = foo
}
else {
string foo[] = "bad choice"
whatdone = "nogood"
outit = foo
}
print "outit " outit[0] "\n"
// do a bunch of stuff with "outit" values
return whatdone
}
DXL 不允许您将值分配给 outit
,哭泣 "length mismatch",但允许您将 outit
设置为完全定义的 foo
我希望能够将一个选择器值发送到一个函数,并让该函数创建一个值的字符串数组以供后续操作使用。我 运行 遇到的问题是 DXL 规则不会 "see" 在 "if {} " 块内声明的变量,即使我已经保证在所有情况下我的字符串数组都会得到初始化。示例:
string tryme( int thechoice){
string outit
if (thechoice == 1){
outit = "you chose one"
}
else if (thechoice ==2){
outit = "you chose two"
}
else { outit = "bad choice"}
// do a bunch of stuff with "outit" values
return outit
}
// that works, but this doesn't
string trymore( int thechoice){
if (thechoice == 1){
string outit[] = {"you chose one","and one"}
}
else if (thechoice ==2){
string outit[] = {"you chose two","and two", "and three"}
}
else { string outit = "bad choice"}
// do a bunch of stuff with "outit" values
return outit
}
我可以使用动态数组,这样我就可以在 "if{}" 之前声明数组,但是我不得不在每个案例中编写循环,使用 put
来加载数组.
我知道 DXL 的功能有限,但如果有人知道更好的方法,请告诉我。
附加约束
最后,我希望能够从循环中重复调用该函数,每次都更改 "thechoice"。这就是我不能在父脚本中声明字符串数组的原因,因为一旦声明 (string outit[] = {'a','b'}
),DXL 就无法删除数组或调整其大小。
比那更容易,虽然有点违反直觉。我需要在不分配任何东西的情况下声明一个字符串向量,然后生成一个临时字符串向量,然后将我想要的变量设置为等于临时值。像这样:
string trymore( int thechoice){
string outit[]
string whatdone
if (thechoice == 1){
string foo[] = {"you chose one","and one"}
whatdone = "did one"
outit = foo
}
else if (thechoice ==2){
string foo[] = {"you chose two","and two", "and three"}
whatdone = "did two"
outit = foo
}
else {
string foo[] = "bad choice"
whatdone = "nogood"
outit = foo
}
print "outit " outit[0] "\n"
// do a bunch of stuff with "outit" values
return whatdone
}
DXL 不允许您将值分配给 outit
,哭泣 "length mismatch",但允许您将 outit
设置为完全定义的 foo