Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Scilab:无法更改figure.user_数据元素的大小_String_Vector_Struct_Scilab_Uicontrol - Fatal编程技术网

String Scilab:无法更改figure.user_数据元素的大小

String Scilab:无法更改figure.user_数据元素的大小,string,vector,struct,scilab,uicontrol,String,Vector,Struct,Scilab,Uicontrol,Scilab的版本是5.5.1。我遇到了figure handle的user_data属性的问题: 我已经将user_数据定义为一个struct(参见底部的MWE) 但当我尝试将变量存储到figure.user_数据字段时,如果向量大小已更改,则会引发错误(使用任何类型的向量) 在不使用用户数据的情况下执行此操作非常有效,因此解决方案可能是删除figure.user\u数据值,然后使用my值定义新结构,然后在此新值处定义用户数据 然而,这并不能解决最初的问题 下面是一个带有figure.user

Scilab的版本是5.5.1。我遇到了figure handle的user_data属性的问题:

我已经将user_数据定义为一个struct(参见底部的MWE)

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

在不使用用户数据的情况下执行此操作非常有效,因此解决方案可能是删除figure.user\u数据值,然后使用my值定义新结构,然后在此新值处定义用户数据

然而,这并不能解决最初的问题

下面是一个带有figure.user_数据向量大小问题的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)

这似乎是Scilab 5.5.1中的一个bug。我尝试在Windows7上使用Scilab 6.0.0复制它,效果很好

当我使用旧版本(5.3.3)时,我发现有时设置地物的属性可能很棘手。然而,一直有效的方法是使用
set()
函数,而不是使用点运算符。不过,正如您所提到的,您需要一次性设置
user\u 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中的一个bug。我尝试在Windows7上使用Scilab 6.0.0复制它,效果很好

当我使用旧版本(5.3.3)时,我发现有时设置地物的属性可能很棘手。然而,一直有效的方法是使用
set()
函数,而不是使用点运算符。不过,正如您所提到的,您需要一次性设置
user\u 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);

你说得对,他们在5.5.1以上的版本中修复了这个错误。谈到set,手册页给出:“此例程可用于修改图形实体或GUI对象中指定属性的值。在这种情况下,它相当于在句柄上使用点运算符。例如,set(h,“background”,5)相当于h.background=5。”。这就是为什么我喜欢圆点,它缩小了代码的范围。我知道它看起来更好,但它并不总是适合我。有一次,我尝试使用点操作符为一个学校项目创建一个GUI,它有时会工作,而其他人则不会。我必须在任何地方使用
set()
才能使一切正常工作。没错,他们在5.5.1以上的版本中修复了这个错误。谈到set,手册页给出:“此例程可用于修改图形实体或GUI对象中指定属性的值。在这种情况下,它相当于在句柄上使用点运算符。例如,set(h,“background”,5)相当于h.background=5。”。这就是为什么我喜欢圆点,它缩小了代码的范围。我知道它看起来更好,但它并不总是适合我。有一次,我尝试使用点操作符为一个学校项目创建一个GUI,它有时会工作,而其他人则不会。我必须在任何地方使用
set()
,才能使一切正常工作。