相关疑难解决方法(0)

为什么可以在*之后使用函数中的内容导入包*?

我在MATLAB R2014b上,有一个问题,我将通过以下示例说明.

MWE可以如下制作或在此处下载为.zip文件.

+test在路径上创建一个包文件夹,其中包含四个函数文件:

+test
    a.m
    b.m
    c.m
    d.m
Run Code Online (Sandbox Code Playgroud)

内容a.m:

function a
disp 'Hello World!'
Run Code Online (Sandbox Code Playgroud)

内容b.m:

function b
a
Run Code Online (Sandbox Code Playgroud)

如果从命令行运行b,则必须先导入test包(import test.*)或运行test.b.

运行b将导致错误,因为函数的范围b不包含函数a.我们必须先导入它才能使用它.为此,我创造了c.m:

function c
import test.*
a
Run Code Online (Sandbox Code Playgroud)

现在运行c正常.

现在我的问题.如果我c.m改为(保存在d.m):

function d
a
import test.*
Run Code Online (Sandbox Code Playgroud)

即在调用package函数之后发出import命令a.运行d仍然可以正常工作,就好像导入命令的位置d.m无关紧要.导入似乎在调用函数之前发生a,这在d.m导入之前的行上发生.

为什么会这样呢?这是预期的行为,它的用途是什么?MATLAB如何以及以何种顺序读取.m文件并对其进行处理?更偏离主题,但总的来说:与MATLAB相比,如何导入以不同语言处理的包,命令的顺序是否重要?

我基于注释的先发制人的结论:最好只在MATLAB代码开头或附近使用导入函数.这清楚地显示了导入的内容在整个元素中可用(例如,功能).它还可以防止错误的假设,即在导入之前,内容尚未可用或引用具有相同名称的其他内容.

import matlab packages package

7
推荐指数
1
解决办法
386
查看次数

如果函数也是MATLAB中的变量会发生什么?

标题可能听起来很奇怪.所以这是一个例子.

Say length是在MATLAB中广泛使用的关键字或内部函数,有人保存了一个名为的变量length.

我可以运行以下脚本而没有任何问题,但是如果我将它放在一个函数中它会产生错误(使用R2015b)

一个有效的脚本

clear length;
length = [1 2 4];
la = length;
clear length;
b = length(la);
Run Code Online (Sandbox Code Playgroud)

功能不起作用

function test(a)
    length = [1 2 4];
    save('data.mat','length');
    clear length;
    load('data.mat');
    % load
    la = length;
    clear length;

    b = length(la); 
end
Run Code Online (Sandbox Code Playgroud)

错误:引用已清除的变量长度.

为什么会这样?MATLAB如何以不同方式处理这些情况?这应该发生在其他功能/关键字上吗?

variables matlab namespaces keyword

2
推荐指数
1
解决办法
657
查看次数

脚本在函数中运行出现令人费解的错误

我在Matlab R2012b中遇到了一个令人费解的错误.似乎也是数据类型的变量名称表现出奇怪的行为.请看这个小例子:

function [] = test1()
dataset = 1;

if dataset ~= 0
  disp hello
end

end
Run Code Online (Sandbox Code Playgroud)

正如预期的那样test1()产生输出的调用hello.现在,dataset我不是在我的函数中设置值,而是运行一个脚本.

function [] = test2()
myscript;

if dataset ~= 0
  disp hello
end

end
Run Code Online (Sandbox Code Playgroud)

myscript.m一条有一条线:

dataset=1;
Run Code Online (Sandbox Code Playgroud)

现在,当我打电话时,test2()我收到此错误:

Undefined function 'ne' for input arguments of type 'dataset'.
Error in test2 (line 4)
if dataset ~= 0 
Run Code Online (Sandbox Code Playgroud)

(原谅名为变量的变量dataset- 我知道它也是数据类型的名称,它出现在我正在运行的代码中.)所以好像在test2,Matlab创建一个空dataset对象而不是使用名为的变量dataset.此外,仅当我在脚本中而不是在函数体中设置值时,才会出现此行为.更奇怪的是,我能做到:

>> dbstop in test2 at 4 % line …
Run Code Online (Sandbox Code Playgroud)

matlab

1
推荐指数
1
解决办法
111
查看次数

标签 统计

matlab ×3

import ×1

keyword ×1

namespaces ×1

package ×1

packages ×1

variables ×1