Scilab:无法更改figure.user_data元素的大小

时间:2017-08-24 09:16:39

标签: string vector struct scilab uicontrol

Scilab的版本是5.5.1。我遇到了数字句柄的user_data属性问题:

我已将user_data定义为结构(请参阅底部的MWE)

但是当我尝试将变量存储到figure.user_data字段时,如果矢量大小已更改,则会引发错误(使用任何类型的矢量)

执行user_data的工作完全正常,因此解决方案可能是删除figure.user_data值,然后使用我的值定义新结构,然后在此新值处定义user_data。

然而,这并没有解决最初的问题。

下面是一个带有figure.user_data向量大小问题的MWE,并且引发了错误

//
clc
clear
xdel(winsid())

strct = struct('int',0,'str','str','vstr',['a';'b'])
old_strct = strct

// changing vectors size in a struct works
strct.int = [0,1,2]   // ok
strct.str = ['a';'b'] // ok
strct.vstr =['b','c'] // ok
strct.vstr =['a','b','c'] // ok

f=figure('visible','off')
f.user_data = old_strct // ok
// but changing it inside the user_data property doesn't
f.user_data.int = strct.int // see error below
f.user_data.str = strct.str // error 
f.user_data.vstr = ['b';'c'] // ok as size is the same
f.user_data.vstr =['a','b','c'] // error

// we can still erase all the struct with a new one, though
f.user_data = strct //ok but not efficient to delete all the field to change one

  !--error 15 
Sub-matrix not well defined.
at line      45 of function generic_i_h called by :  
at line       2 of function %s_i_h called by :  
f.user_data.int = strct.int // error
at line      21 of exec file called by :    
exec('/net/jabba/home0/pp607946/brouillon.sce', -1)

1 个答案:

答案 0 :(得分:0)

这似乎是Scilab 5.5.1中的一个错误。我尝试在Windows 7上使用Scilab 6.0.0重现它,它运行得很好。

当我使用旧版本(5.3.3)时,我发现有时设置一个数字的属性可能会很棘手。然而,总是起作用的是使用set()函数而不是您正在使用的点运算符。您需要一次性设置user_data的所有字段,正如您自己提到的那样。要设置单个字段,请使用临时变量或重用旧变量。

//all new fields
set(f,'user_data',strct);

//one field at a time
old_strct.int = strct.int; set(f,'user_data',old_strct);
old_strct.str = strct.str; set(f,'user_data',old_strct);
old_strct.vstr = strct.vstr; set(f,'user_data',old_strct);