假设我有以下类来计算二次方程的解:
classdef MyClass < handle
properties
a
b
c
end
properties (Dependent = true)
x
end
methods
function x = get.x(obj)
discriminant = sqrt(obj.b^2 - 4*obj.a*obj.c);
x(1) = (-obj.b + discriminant)/(2*obj.a);
x(2) = (-obj.b - discriminant)/(2*obj.a);
end
end
end
Run Code Online (Sandbox Code Playgroud)
现在假设我运行以下命令:
>>quadcalc = MyClass;
>>quadcalc.a = 1;
>>quadcalc.b = 4;
>>quadcalc.c = 4;
Run Code Online (Sandbox Code Playgroud)
此时,quadcalc.x = [-2 -2]
.假设我quadcalc.x
多次调用而不调整其他属性,即quadcalc.x = [-2 -2]
每次我要求这个属性.被quadcalc.x
重新计算每一次,还是会只是"记住" [-2 -2]
我正在编写一个Perl脚本,它将编写一些输入并将这些输入发送到外部程序.这个程序有一个很小但非零的机会,我想把它计时:
my $pid = fork;
if ($pid > 0){
eval{
local $SIG{ALRM} = sub { die "TIMEOUT!"};
alarm $num_secs_to_timeout;
waitpid($pid, 0);
alarm 0;
};
}
elsif ($pid == 0){
exec('echo blahblah | program_of_interest');
exit(0);
}
Run Code Online (Sandbox Code Playgroud)
现在,在$ num_secs_to_timeout之后,program_of_interest仍然存在.我试图在匿名子程序中杀死它,$SIG{ALRM}
如下所示:
local $SIG{ALRM} = sub{kill 9, $pid; die "TIMEOUT!"}
Run Code Online (Sandbox Code Playgroud)
但这没有做任何事情.program_of_interest仍然存在.我如何杀死这个过程?
我正在自学bash,并使用学习bash Shell这样做.
我注意到在流控制中我们定义了一个if/else语句:
if [ statement_is_true ]; then
# do stuff here
elif [ some_other_statement]; then
# other thing
else
# if all else fails
fi
Run Code Online (Sandbox Code Playgroud)
以及一个案例陈述:
case $expr in
case1 )
;;
case2 )
;;
esac
Run Code Online (Sandbox Code Playgroud)
但是for循环可能被定义为
for i in $list;
do
# something cool with the various $i
done
Run Code Online (Sandbox Code Playgroud)
和一个循环作为
while [ condition ]; do
# something that loops
done
Run Code Online (Sandbox Code Playgroud)
为什么结束for
,while
以及until
循环标注done
,而不是rof
,elihw
和litnu
分别,喜欢if/fi …
对于emacs,我有点像新手.我知道.emacs文件,但是对于做一些比基本内容更先进的事情一点都不知道.
每当我进入乳胶模式时,我也想自动打开flyspell模式,reftex模式,自动填充模式,并将fill-column设置为120.如何编辑我的.emacs文件来执行此操作?
谢谢!
我正在收集数据并实时绘制数据.数据由运动捕捉系统产生.我有一个类DynamicDataset
只是一个2列矩阵的包装器(虽然它比那更细致),并且添加了新数据的事件通知器; 另一个类DynamicPlotter
,它监听数据添加事件并动态更新绘图.适当的代码段:
classdef DynamicDataset < handle
properties
newestData = [];
data = []
end
events
DataAdded
end
methods
function append(obj, val)
obj.data(end+1,:) = val;
obj.newestData = val;
notify(obj, 'DataAdded');
end
end
end
classdef DynamicPlotter < dynamicprops
properties
FH %# figure handle
AH %# axes handle
LH %# array of line handles - may have multiple lines on the plot
dynProps = {} %# cell array of dynamic property names -
%# use to access individual datasets …
Run Code Online (Sandbox Code Playgroud) 我已经写了一段时间的OOP MATLAB代码了.但是,我现在第一次在Windows机器上运行MATLAB代码.
我有以下代码:
classdef myClass < handle
properties
i
end
methods
function obj = myClass()
obj.i = 0;
end
function say(obj)
obj.i = obj.i + 1;
fprintf('This is time #%i you invoked me!\n', obj.i);
end
end
end
Run Code Online (Sandbox Code Playgroud)
看起来很无害.我尝试实例化一个对象,我得到了这个:
>> m = myClass;
Error using myClass
Error: File: myClass.m Line: 1 Column: 10
A class definition must be an "@" directory.
Run Code Online (Sandbox Code Playgroud)
我在编写OOP MATLAB代码的过程中从未使用@ -folder.我的理解是,如果类方法与classdef文件分开编写(我的不是),或者它是使用旧式的MATLAB类语法(我的不是),这是必需的.
我想我知道这笔交易是什么,我想知道是否有解决方法:我的工作目录是形式
C:\Users\DangKhoa@MyCompany.com\Documents\MATLAB
Run Code Online (Sandbox Code Playgroud)
是@
抛出MATLAB并让计算机认为我在@ -folder中?如果是,是否有解决方法(除了在我的计算机上创建一个新用户,显然 - 这可能是不可行的)?如果没有,发生了什么?
假设我有一些课程foo < handle
,而且bar < foo
,baz < foo
也许qux < foo
.我可以通过几种方式存储这些对象的数组:
作为单元格数组: A = {foo bar baz qux} % A(1) would be a cell, A{1} gives me a foo object
从R2011a开始,我可以制作foo <
matlab.mixin.Heterogeneous
,然后直接构建一个数组:A = [foo bar baz qux] % A(1) directly gives me a foo object
我从维护的角度来看,最好使用第二种方法而不是第一种方法,这样就消除了如何访问的模糊性A
.也就是说,当我们需要取消引用单元格数组的元素(单元格A(1)
与foo
对象A{1}
,它们居住在内部A(1)
).
但是使用一种语法与另一种语法有什么样的内存或性能损失(或好处)?
假设我有一个类uicontrolWrapper
,它是a的包装器uicontrol
(但不是它的子类).这些uicontrol
东西被保存在私人财产中uicontrolWrapper
.基本上,我希望能够set/get
对包装器进行操作,并且调用将会进入uicontrol
.
我能做到这一点:
classdef uicontrolWrapper < handle
properties (Access = private)
uic
end
properties (Dependent)
Style
String
Value
...
end
methods
function set.Style(obj, val)
obj.uic.Style = val;
end
function val = get.Style(obj)
val = obj.uic.Style;
end
...
end
Run Code Online (Sandbox Code Playgroud)
但像这样的硬编码显然非常难看.
或者,我可以根据我想要包装的内容动态生成属性:
classdef uicontrolWrapper < dynamicprops
properties (Access = private)
uic
end
methods
function obj = uicontrolWrapper(hObj)
obj.uic = hObj;
cellfun(@(prop) obj.createProperty(prop, fields(get(hObj));
end
function createProperty(obj, prop)
p = …
Run Code Online (Sandbox Code Playgroud) 我有一个继承自多个超类的类,我想获得该类具有的方法.天真地使用methods()
我正在使用的类中的返回方法以及超类方法,但我对超类方法不感兴趣.
知道怎么做吗?我在MATLAB文档中找不到任何内容.
谢谢!
假设我有以下课程:
classdef myClass
properties
Globals = struct(...
'G1', 1, ...
'G2', 2 ...
);
end
methods
% methods go here
end
end
Run Code Online (Sandbox Code Playgroud)
我使用struct,因为还有其他属性是结构.
有没有办法为结构域提供一个setter?天真地提供
function obj = set.Globals.G1(obj, val)
obj.Globals.G1 = val; % for example
end
Run Code Online (Sandbox Code Playgroud)
不起作用.