gpt4 book ai didi

matlab - 调用该功能不起作用

转载 作者:行者123 更新时间:2023-12-02 10:49:25 24 4
gpt4 key购买 nike

我有一个单元格的结构,每个结构包含一个人的个性。我将其放入此函数中,以使其在选定名称的文本文件中列出。

function store( filename, persons )

fid = fopen(filename,'w');

for i=1:length(persons)

fprintf(fid, '%s',serialize_person(persons{i}));
end

现在,此功能可以正常工作:输入<1x3单元格>并列出三个列出的人员的文本文件。但是,我想从另一个调用此函数:
function process_store()

list=input('Write in the list of persons you want listed: ');
fprintf('\n')
newfile=input('Give the text file a name: ','s');

store(filename,list)
end

在这里,我像以前一样输入<1x3单元格>的名称,但收到错误消息“使用输入,未定义的函数或变量'persons'时出错”。
为什么是这样?我不是在使用与“商店”中使用的Im完全相同的数据吗?

最佳答案

问题在于,在函数persons中无法访问变量process_store。在Matlab(和大多数其他编程语言)中,函数无法访问其调用函数中定义的变量。为了更好地理解这一点,我建议阅读levels of scope上的Wikipedia文章。

在这里,您基本上有两个选择:

  • 使用声明persons,在工作空间和函数process_store中,使global persons成为全局变量。我不推荐这个。
  • 使用函数evalin允许process_store访问其父工作区中的变量。

  • 如果我是你,我会选择选项2。这有点棘手,所以让我解释一下它是如何工作的。让我们在全局工作区中创建一个 persons变量。
    >> persons = {'John', 'Jack', 'Jill'};

    现在说我们有以下功能
    function example()
    x = input('Give me a variable name: ');
    disp(x)
    end

    如果我们尝试使用它会怎样?
    >> example()
    Give me a variable name: persons
    Error using input
    Undefined function of variable 'persons'
    Error in example (line 2)
    x = input('Give me a variable name: ');

    噢亲爱的。这是因为函数 example无法访问全局工作空间,而 persons是在全局工作空间中定义的。但是,相反,我们可以存储要访问的变量的名称,然后使用 evalin在全局工作区中 checkout 其值,如下所示
    function example()
    s = input('Give me a variable name: ', 's');
    x = evalin('caller', s);
    disp(x)
    end

    现在,如果我们使用它:
    >> example()
    Give me a variable name: persons
    'John' 'Jack' 'Jill'

    它按预期工作!大!

    大量免责声明

    几乎没有理由使用 evalin(或 evalassignin或其他将字符串作为代码执行困惑的函数)之类的功能。几乎可以肯定,有一种更好的方法可以做您想做的事情。但是不知道您要做什么,很难为您提供更好的建议。

    关于matlab - 调用该功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20142024/

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