startup.m 中的变量声明在 MATLAB 中不起作用

Variable declaration in startup.m not working in MATLAB

我正在尝试声明一些我需要在每个脚本中访问的幻数常量。我在 my_path 中创建了一个文件 load_constants.m,它看起来像:

magic_number = 10;
other_magic_number = 12;

我的 startup.m 看起来像这样:

% add a bunch of packages
addpath ~/Documents/MATLAB/some-package

userpath(my_path)
load_constants

但是当我尝试在命令 Window:

中访问 magic_number
Undefined function or variable 'magic_number'.

直接在startup.m中声明变量也不行。如何解决这个问题?

这是正常行为,startup.m 是一个函数,函数内部声明的变量是该函数的 local(然后在超出范围时消失) :

function [] = startup()
%[
    magic_number = 10; %% This is local variable
%]

使用 assignin 函数使 magic_numberbase 工作区可见:

function [] = startup()
%[
    assignin('base', 'magic_number', 10); % This value will be visible from 'base' workspace
%]

请注意,为了使 magic_number 值不仅对脚本可见,而且对函数也可见,最好创建一个 magic_number.m 函数并将其添加到您的路径中:

function [v] = magic_number()
%[
    v = 10;
%]

可以在没有括号的情况下调用(即就像变量的语法一样)