how to make a constant global so all packages files use it?

조회 수: 10 (최근 30일)
Ano
Ano 2017년 5월 23일
댓글: Rik 2021년 8월 5일
hello! I would like to define a constant in such a way all my functions in the package folders use it , how can I do it ?? Thank you in advance .

채택된 답변

Jan
Jan 2017년 5월 23일
As Stephen has explained already, passing variables as arguments is the best practice.
If you have really good reasons to define a constant globally, do not use global, but prefer a dedicated function, which provides the values as struct:
function C = myPackageConstants()
C.g = 9.81;
C.pi = 3.14159265;
C.VolumeOfHeidelbergBarrel = 221716; % liter
Then call this from all function as:
C = myPackageConstants;
This is less clear than using arguments. If it is called very often, it might matter that it has a certain runtime overhead. But in opposite to globals, you can be sure that the values are not modified anywhere, such that debugging gets horrible.
  댓글 수: 2
Stephen23
Stephen23 2017년 5월 23일
+1 nice solution
Steven Lord
Steven Lord 2017년 5월 23일
Or if it's a single constant that is broadly usable, like pi, make it a function that returns just that one value. The pi function is built-in, but if it were written as a function file it would be just:
function P = pi
P = 3.14159265358979;

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Robert
Robert 2021년 2월 26일
You could also define a class with only constant properties. Contrary to Jan's solution, you can access the constants directly, without having to assign all of them to a variable first.
Calling it many times does not result in runtime overhead, like Jan said might be the case for his solution.
classdef Constants
properties (Constant)
g = 9.81
k = 1.234
end
end
Reference the constants using:
Constants.g
Of course, if the Constants class is in one of your packages, you have to include its namespace in the call.
  댓글 수: 2
Florian B
Florian B 2021년 8월 5일
편집: Florian B 2021년 8월 5일
Would using the reference as
x = Constants.g;
instantiate the object "Constants" though? Or is this a static property?
Rik
Rik 2021년 8월 5일
It is a static property for most intents and purposes.
You could easily see if multiple calls of this type will call the constructor multiple times by putting a disp in the constructor.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Use Prebuilt MATLAB Interface to C++ Library에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by