gpt4 book ai didi

containers - Octave container.map 在成员函数中不起作用

转载 作者:行者123 更新时间:2023-12-04 10:55:55 31 4
gpt4 key购买 nike

我有以下测试代码,它只创建一个空的 hashmap (containers.map) 并在之后填充它:

 hashtable = containers.Map('KeyType','char','ValueType','double');
hashtable('test') = 1.0;

只要我在我的“主”文件中使用它,一切正常......
但是,如果我将这两行复制到自创建类的成员函数中,则会出现错误:

错误:找不到类:MyClassName

错误:从 调用

第 15 行第 31 列的 myMemberFunction

第 15 行是“hashtable('test') = 1.0;”站立。
如果我删除这一行,一切都会恢复正常。
我绝对不明白,为什么错误说,它找不到我的类(class)......
我测试了我的类(class),一切正常。

我按以下方式设置类(class):

1:创建一个名为:“@MyClassName”的文件夹

2:创建一个名为:“MyClassName”的构造函数文件

3:添加了一个名为:“function obj = MyClassName(obj)”的构造函数

4:创建了一个名为:“myMemberFunction”的成员函数文件

5:在这个文件中创建了一个成员函数:“function obj = myMemberFunction(obj)

如果此代码(哈希图)位于我的构造函数中,则它可以正常工作。
仅当它位于我的成员函数第 15 行“hashtable('test') = 1.0;”时使错误。

最佳答案

tl;博士 - 替换

hashtable('test') = 1.0;


subsasgn( hashtable, substruct( '()', {'test'} ), 1.0 );

不确定这是否是预期行为,或者是 container.Map 作为 classdef 定义类的副作用,以及这是否是因为新旧样式类不能很好地相互配合。可能值得为此提交一个错误。但是,问题似乎是因为 hashtable('test')未按预期在方法内部进行解析 - 大概不是将其有效地视为“引用”操作,而是将其视为函数调用?

为了完整起见,这里有一个 MVCE:
% @MyClassName/MyClassName.m
function obj = MyClassName(obj)
obj = struct('myfield', []);
obj = class(obj, 'MyClassName');
end
% @MyClassName/display.m
function display( Obj );
display( [inputname(1), '.myfield = '] );
display( get( Obj, 'myfield' ) );
end
% @MyClassName/get.m
function Out = get( Obj, Field )
Out = struct(Obj).(Field);
end
% @MyClassName/set.m
function Obj = set( Obj, Field, Val )
Obj = struct(Obj);
Obj.(Field) = Val;
Obj = class( Obj, 'MyClassName' );
end
% @MyClassName/myMemberFunction.m
function obj = myMemberFunction(obj)
hashtable = containers.Map('KeyType', 'char', 'ValueType', 'double');
subsasgn( hashtable, substruct( '()', {'test'} ), 1.0 );
obj = set( obj, 'myfield', hashtable );
end

在终端:
octave:1> a = MyClassName();
octave:2> a = myMemberFunction(a);
octave:3> a
a.myfield =
containers.Map object with properties:
Count : 1
KeyType : char
ValueType : double

关于containers - Octave container.map 在成员函数中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59196566/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com