Scilab:无法更改 figure.user_data 的元素大小
Scilab: size of elements of figure.user_data cannot be changed
Scilab 的版本是 5.5.1 。我遇到了图形句柄的 user_data 属性 的问题:
我已将 user_data 定义为一个结构(请参阅底部的 MWE)
但是当我尝试将变量存储到 figure.user_data 字段时,如果向量大小发生变化,则会引发错误(对于任何类型的向量)
在 user_data 之外做它完美无缺,所以解决方案可能是擦除 figure.user_data 值,然后用我的值定义一个新结构,然后定义 user_data 在这个新值。
然而,这并没有解决最初的问题。
下面是一个 MWE,有 figure.user_data 向量大小问题,并引发了错误
//
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)
这似乎是 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);
Scilab 的版本是 5.5.1 。我遇到了图形句柄的 user_data 属性 的问题:
我已将 user_data 定义为一个结构(请参阅底部的 MWE)
但是当我尝试将变量存储到 figure.user_data 字段时,如果向量大小发生变化,则会引发错误(对于任何类型的向量)
在 user_data 之外做它完美无缺,所以解决方案可能是擦除 figure.user_data 值,然后用我的值定义一个新结构,然后定义 user_data 在这个新值。
然而,这并没有解决最初的问题。
下面是一个 MWE,有 figure.user_data 向量大小问题,并引发了错误
//
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)
这似乎是 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);