我有一个具有一些依赖属性的类,但我真的只想计算一次.
我刚刚得出结论,在MATLAB中对依赖类属性使用惰性求值要么是不可能的,要么是个坏主意.最初的计划是为每个需要更新的(公共)属性创建一个私有逻辑标志,并让构造函数将其设置为true.然后,当调用属性访问器时,它将检查该标志并计算该值并仅在需要时将其存储(在另一个私有属性中).如果该标志为false,则只返回缓存值的副本.
我认为困难在于对属性访问者的限制,即他们只留下其他不相关的属性.换句话说,get.property(self)方法不能更改self对象的状态.有趣的是,这在我当前的课堂上无声地失败了.(即,更新标志和缓存计算结果都没有在get.方法中设置,因此每次都运行昂贵的计算).
我怀疑是将lazy属性从公共依赖属性更改为具有公共GetAccess但私有SetAccess的方法将起作用.但是,我不喜欢以这种方式欺骗财产惯例.我希望只有一个"懒惰"的属性可以为我做这一切.
我错过了一些明显的东西吗 是否禁止在MATLAB中依赖类属性的访问器方法来更改类实例的状态?如果是这样,那么定义具有私有副作用的访问者的数量是获得我想要的行为的最不邪恶的方式吗?
编辑:这是一个测试类......
classdef LazyTest
properties(Access = public)
% num to take factorial of
factoriand
end
properties(Access = public, Dependent)
factorial
end
properties(Access = private)
% logical flag
do_update_factorial
% old result
cached_factorial
end
methods
function self = LazyTest(factoriand)
self.factoriand = factoriand;
self.do_update_factorial = true;
end
end
methods
function result = get.factorial(self)
if self.do_update_factorial
self.cached_factorial = factorial(self.factoriand);
% pretend this is expensive
pause(0.5)
self.do_update_factorial = false
end
result = self.cached_factorial;
end
end
end
Run Code Online (Sandbox Code Playgroud)
运行它
close all; …Run Code Online (Sandbox Code Playgroud) 在Visual Studio 2012中,我正在寻找一种在Autos,Locals和Watch窗口中自定义浮点类型的默认显示的方法.我熟悉Native Visualizer(Natvis)实用程序,但没有看到任何调试器格式化工具来完成此任务.同样,我不知道有任何方法可以覆盖任何基元类型的默认显示(除了启用十六进制).
目标是创建显示字符串,其中针对与点,几何向量等对应的类型扩展了更少的数字,但在扩展类型时仍然显示所有精度.因此,例如,我可能有一个点类型显示的变量,(0.000, 1.234, 2.429)而不是m_x = 0.00000000, m_y = 1.234245213...在Autos窗口的中间列中.
我查看了此页面上的格式说明符,但没有看到控制浮点精度的方法.
我正在使用新的属性架构,并且在我注册或注销新版本时一直习惯检查注册表。检查此问题的主要地点之一是HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\PROPERTYSYSTEM\PROPERTYSCHEMA。
有趣的是,我有时会失去对Regedit中此注册表位置的访问权限。我看到了这一点(注意缺少PropertySchema):
我知道架构仍在注册,因为我可以使用prop.exe工具和propschema SDK示例应用程序来描述它们。这些属性在Windows资源管理器和“搜索”中可用。
另外,我可以使用PowerShell列出此配置单元的内容:
C:\Users\carlton> cd hklm:
HKLM:\>
C:\Users\carlton> cd hklm:
HKLM:\> cd SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\PROPERTYSYSTEM\PROPERTYSCHEMA
HKLM:\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\PROPERTYSYSTEM\PROPERTYSCHEMA> dir
Hive: HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\PROPERTYSYSTEM\PROPERTYSCHEMA
Name Property
---- --------
0000 (default) : C:\Program Files\Internet Explorer\ie9props.propdesc
SchemaId : {D9B5ABA1-5E8A-4902-B6A1-50B3C0311C2E}
URI : ie9props.propdesc
CompactURI : 5376bae4b39f43768806afcb6b8ff5464bf9c989d1a819c6e6d99ba1e8ce2512
0001 (default) : C:\Program Files\Microsoft Office\Office14\Custom.propdesc
SchemaId : {537AAAB1-1D85-48DC-A99E-16EB8C309FE5}
URI : custom.propdesc
CompactURI : 2e3be58e5cbbc0da093956b46a3905f11cf0f5bbf11987a8619e25f7261ee8be
0002 (default) : C:\apps\MSOffice\Office14\VisioCustom.propdesc
SchemaId : {18503526-0466-4942-AC6E-41C1D380EABA}
URI : visiocustom.propdesc
...
Run Code Online (Sandbox Code Playgroud)
无论如何,我不了解这种情况如何发生以及是否应该为此担心。从同事的计算机上导出此密钥并重新导入它可以暂时提供帮助,因为它将在Regedit中显示已隐藏/丢失的密钥(即使它们不在我的同事的计算机上)。
我在运行Windows 7 SP1的Administrators组中。
我想查看特定自定义指标每个时间间隔的最小,最大和平均统计信息。在这种情况下,这是系统正在摄取的每个文件的大小。当前,我可以在CloudWatch仪表板中使用三个独立的小部件来执行此操作,每个统计信息一个:
我真的更希望在同一根轴上至少有两条曲线。我知道如何在一个小部件上放置两条不同的曲线,但这似乎只支持使用相同的聚合函数的两种不同的指标。