C# WPF MVVM开发框架Caliburn.Micro 自定义Conventions⑩

处理自定义约定

虽然ViewLocator和ViewModelLocator类通过提供对每个类的NameTransformer实例的公共访问来支持非标准约定,但对于那些不熟悉正则表达式语法的人来说,添加基于正则表达式的新名称转换规则可能是一项艰巨的任务。此外,由于NameTransformer设计用于执行通用名称转换,因此它不允许单独定制名称和名称空间转换。换句话说,没有简单的方法可以在维护名称空间的标准转换的同时添加对自定义视图名称后缀的支持,也没有简单的方法可以在维护类型名称的标准转换的同时更改名称空间转换。认识到这些局限性,我们为每个定位器类添加了可配置性和几个高级方法。这些新特性允许为常见用例构建自定义转换规则,而无需了解正则表达式。此外,这些方法是领域感知的(即它们考虑了名称空间和类型名称的概念),而不是面向泛型名称转换。

术语

在介绍定位器类的这些新方法之前,最好先讨论一下术语。

名称转换是一个通用术语,用于描述如何进行类型解析。类型的完全限定名作为源,然后“转换”为输出类型的名称。在最低级别,NameTransformer类负责此操作,并使用基于正则表达式的“转换规则”执行转换。

类型映射是一个术语,用于描述添加到定位器类中的新功能。创建类型映射被认为是更高级别的操作,因为类型映射考虑类型解析的两个方面:解析类型的名称和解析类型的命名空间。尽管类型映射最终被表示为NameTransformer的转换规则,但是创建类型映射的方法除了更特定于域之外,还可以使您不必理解正则表达式。

类型映射的配置

这两个定位器类都可以通过调用新的ConfigureTypeMappings()方法进行配置,该方法将TypeMappingConfiguration类的实例作为参数。

类型映射配置类

此类具有各种属性,其值用作定位器类配置各种高级类型映射方法行为所需的全局设置。

Properties

DefaultSubNamespaceForViews:包含应用程序视图的子名称空间(即命名空间“MyProject.Views”中的“视图”)。此值用于为ViewModels创建具有子名称空间的默认映射。默认值为“视图”。

DefaultSubNamespaceForViewModels:包含应用程序的ViewModels的子命名空间(即命名空间“MyProject.ViewModels”中的“ViewModels”)。此值用于为视图创建具有子名称空间的默认映射。默认值为“ViewModels”。

UseNameSuffixesInMappings:指示映射是否应考虑类型名称中的名称后缀以区分视图和视图模型的标志。如果可以通过命名空间或子命名空间空间来区分视图和ViewModels,则可以将此值设置为false。默认值为true。

NameFormat:用于使用基名称(或实体名称)和视图或视图模型后缀构造类型名称的格式字符串。格式项目如下:

{0}:基名称

{1} :名称后缀

由于只有两个参数将与指定的格式字符串一起使用,NameFormat可以包含上面列出的格式项的任何组合,但不能再包含任何组合(即{2}、{3}等)。默认值为“{0}{1}”(即<basename><suffix>)。

INCLUDEVIEWUFFIXIVIEWMODELNAME:指示映射是否应将“页面”或“表单”等名称后缀作为伴生视图模型名称的一部分的标志(例如CustomerPageViewModel与CustomerServiceWModel或CustomerPerformViewModel与CustomerServiceWModel)。请注意,按照惯例,无论此属性的值如何,如果视图后缀是ViewModel后缀的一部分,则假定忽略视图后缀(即CustomerViewModel而不是CustomerViewModel)。默认值为true。

ViewSuffixList:在配置期间为其创建默认类型映射的视图后缀列表。默认值为“视图”和“页面”。

ViewModelSuffix:用于所有类型映射的ViewSuffix,包括配置期间添加的默认类型映射以及配置之后添加的自定义类型映射。默认值为“ViewModel”。

ViewLocator.ConfigureTypeMapping(), ViewModelLocator.ConfigureTypeMapping() Methods

此方法配置或重新配置定位器类添加类型映射的方式。

public static void ConfigureTypeMapping(TypeMappingConfiguration config)

config参数是一个配置对象,其属性值用作配置类型映射的定位器类的设置。

locator类使用TypeMappingConfiguration类的默认属性值在内部调用此方法。

每次调用此方法时,都会清除现有的名称转换规则,并自动添加新的默认类型映射。

配置对象的设置全局应用于在配置时自动添加的默认类型映射和配置后添加的任何类型映射。例如,如果对NameFormat进行了自定义,以指定将名称后缀放在基名称之前的命名约定,从而将名称后缀转换为前缀(例如ViewCustomer和ViewModelCustomer),则此约定将用作对添加类型映射的方法的任何后续调用的标准类型命名约定

//Override the default subnamespaces
var config = new TypeMappingConfiguration
{DefaultSubNamespaceForViewModels = "MyViewModels",DefaultSubNamespaceForViews = "MyViews"
};ViewLocator.ConfigureTypeMappings(config);
ViewModelLocator.ConfigureTypeMappings(config);//Resolves:
//MyProject.MyViewModels.CustomerViewModel -> MyProject.MyViews.CustomerView
//MyProject.MyViewModels.CustomerPageViewModel -> MyProject.MyViews.CustomerPage
//MyProject.MyViews.CustomerView -> MyProject.MyViewModels.CustomerViewModel
//MyProject.MyViews.CustomerPage -> MyProject.MyViewModels.CustomerPageViewModel//Change ViewModel naming convention to always exclude View suffix
var config = new TypeMappingConfiguration
{DefaultSubNamespaceForViewModels = "MyViewModels",DefaultSubNamespaceForViews = "MyViews",IncludeViewSuffixInViewModelNames = false
};ViewLocator.ConfigureTypeMappings(config);
ViewModelLocator.ConfigureTypeMappings(config);//Resolves:
//MyProject.MyViewModels.CustomerViewModel -> MyProject.MyViews.CustomerPage, MyProject.MyViews.CustomerView
//MyProject.MyViews.CustomerView -> MyProject.MyViewModels.CustomerViewModel
//MyProject.MyViews.CustomerPage -> MyProject.MyViewModels.CustomerViewModel//Change naming conventions to place name suffixes before the base name (i.e. name prefix)
var config = new TypeMappingConfiguration
{NameFormat = "{1}{0}",IncludeViewSuffixInViewModelNames = false
};ViewLocator.ConfigureTypeMappings(config);
ViewModelLocator.ConfigureTypeMappings(config);//Resolves:
//MyProject.ViewModels.ViewModelCustomer -> MyProject.Views.PageCustomer, MyProject.Views.ViewCustomer
//MyProject.Views.ViewCustomer -> MyProject.ViewModels.ViewModelCustomer
//MyProject.Views.PageCustomer -> MyProject.ViewModels.ViewModelCustomer//Change naming conventions to omit name suffixes altogether (i.e. distinguish View and ViewModel types by namespace alone)
var config = new TypeMappingConfiguration
{UseNameSuffixesInMappings = false
};ViewLocator.ConfigureTypeMappings(config);
ViewModelLocator.ConfigureTypeMappings(config);//Resolves:
//MyProject.ViewModels.Customer -> MyProject.Views.Customer
//MyProject.Views.Customer -> MyProject.ViewModels.Customer//Configure for Spanish language and semantics
var config = new TypeMappingConfiguration()
{DefaultSubNamespaceForViewModels = "ModelosDeVistas",DefaultSubNamespaceForViews = "Vistas",ViewModelSuffix = "ModeloDeVista",ViewSuffixList = new List<string>(new string[] { "Vista", "Pagina" }),NameFormat = "{1}{0}",IncludeViewSuffixInViewModelNames = false
};ViewLocator.ConfigureTypeMappings(config);
ViewModelLocator.ConfigureTypeMappings(config);//Resolves:
//MiProyecto.ModelosDeVistas.ModeloDeVistaCliente -> MiProyecto.Vistas.VistaCliente, MiProyecto.Vistas.PaginaCliente
//MiProyecto.Vistas.VistaCliente -> MiProyecto.ModelosDeVistas.ModeloDeVistaCliente
//MiProyecto.Vistas.PaginaCliente -> MiProyecto.ModelosDeVistas.ModeloDeVistaCliente

New Type Mapping Methods

ViewLocator.AddDefaultTypeMapping(), ViewModelLocator.AddDefaultTypeMapping()

此方法用于添加类型映射,该映射支持给定视图名称后缀的标准类型和命名空间命名约定。

public static void AddDefaultTypeMapping(string viewSuffix = "View")

viewSuffix参数是类型名称的后缀。应该是“视图”或“视图”的同义词。(可选)

此方法主要用于添加对具有自定义同义词(例如“表单”、“屏幕”、“选项卡”)但使用标准命名约定的类型的支持。

虽然viewSuffix参数是可选的,默认为“View”,但没有必要以这种方式调用此方法,因为定位器类已经为“View”和“Page”视图名称后缀添加了类型映射,尽管如果定位器类使用ConfigureTypeMappings()方法和修改TypeMappingConfiguration对象的ViewSuffixList属性进行了不同的配置,则情况可能并非如此。但是,修改配置对象的ViewSuffixList属性并重新配置locator类可以避免事后调用此方法。

请记住,如果配置对象的UseNameSuffixesInMappings属性设置为false,则此方法不会添加任何类型映射。在这种情况下,没有为其添加映射的默认类型命名约定。

//Add support for "Form" as a synonym of "View" using the standard type and namespace naming conventions
ViewLocator.AddDefaultTypeMapping("Form");
//Resolves: MyProject.ViewModels.MainFormViewModel -> MyProject.Views.MainFormViewModelLocator.AddDefaultTypeMapping("Form");
//Resolves: MyProject.Views.MainForm -> MyProject.ViewModels.MainFormViewModel

ViewLocator.RegisterViewSuffix()

此方法用于向ViewLocator指示使用NameTransformer.AddRule()添加了支持自定义视图后缀的转换规则。调用AddNamespaceMapping()、AddTypeMapping()和AddDefaultTypeMapping()类型映射方法时,ViewLocator类会自动在内部调用此方法。

public static void RegisterViewSuffix(string viewSuffix)

viewSuffix参数是类型名称的后缀。应该是“视图”或“视图”的同义词。(可选)

为了使多视图支持正常工作,ViewLocator需要跟踪应用程序可能使用的所有视图后缀。尽管在使用新的类型映射方法添加名称转换规则时会自动管理此操作,但直接通过ViewLocator类的NameTransformer实例添加的转换规则将绕过此注册步骤。因此,在这种情况下需要调用ViewLocator.RegisterViewSuffix()。在添加新条目之前,该方法将对现有条目执行检查。

//Manually add a rule to the NameTransformer to do simple text replacement independent of namespace
ViewLocator.NameTransformer.AddRule("ScreenViewModel$", "Screen");
//However, we need to treat "Screen" as a synonym of "View" somehow in order to
//enable multi-view support for View types with names ending in "Screen"
ViewLocator.RegisterViewSuffix("Screen");
//Resolves: MyProject.ViewModels.CustomerScreenViewModel -> MyProject.Views.Customer.Master
//when the context is "Master"

ViewLocator.AddNamespaceMapping(),ViewModelLocator.AddNamespaceMapping()

此方法用于在源命名空间和一个或多个目标命名空间之间添加类型映射。结果类型映射创建了一个转换规则,该规则支持标准类型命名约定,但具有自定义命名空间命名约定。或者,可以为此映射指定自定义视图后缀。

public static void AddNamespaceMapping(string nsSource, string[] nsTargets, string viewSuffix = "View")

nsSource:源类型的命名空间

nsTargets:作为数组的目标类型的名称空间

viewSuffix:类型名称的后缀。应该是“视图”或“视图”的同义词。(可选)

public static void AddNamespaceMapping(string nsSource, string nsTarget, string viewSuffix = "View")

nsSource:源类型的命名空间

nsTarget:目标类型的命名空间

viewSuffix:类型名称的后缀。应该是“视图”或“视图”的同义词。(可选)

此方法支持在nsSource参数中使用通配符(用*)。当nsSource参数使用空字符串(或string.Empty)时,作为nsTarget/nsTargets参数传递的命名空间将追加到源类型的命名空间。有关更多详细信息,请参阅示例。

可以将数组作为目标命名空间的参数传递,以指示目标类型可以存在于多个命名空间中(“一对多”映射)。由于定位器类被设计为拾取与名称转换规则匹配的类型的第一个匹配项,因此,如果某个类型实际上不存在于某个目标名称空间中,或者不同名称空间中存在多个共享同一名称的类型,则无所谓。此机制的一个可能用例是将ViewModel命名空间映射到自定义视图的程序集和标准视图的另一个程序集。如果自定义视图的部件不存在,或者自定义视图部件中不存在特定视图,则ViewLocator将从标准视图部件中拾取视图。

//"Append target to source" mapping
//Null string or string.Empty passed as source namespace is special case to allow this
//Note the need to prepend target namespace with "." to make this work
ViewLocator.AddNamespaceMapping("", ".Views");
//Resolves: MyProject.Customers.CustomerViewModel -> MyProject.Customers.Views.CustomerView//Standard explicit namespace mapping
ViewLocator.AddNamespaceMapping("MyProject.ViewModels.Customers", "MyClient1.Views");
//Resolves: MyProject.ViewModels.CustomerViewModel -> MyClient1.Views.CustomerView//One to many explicit namespace mapping
ViewLocator.AddNamespaceMapping("MyProject.ViewModels.Customers", new string[] { "MyClient1.Views", "MyProject.Views" } );
//Resolves: MyProject.ViewModels.CustomerViewModel -> {MyClient1.Views.CustomerView, MyProject.Views.CustomerView }//Wildcard mapping
ViewLocator.AddNamespaceMapping("*.ViewModels.Customers.*", "MyClient1.Customers.Views");
//Resolves: MyProject.ViewModels.Customers.CustomerViewModel -> MyClient1.Customers.Views.CustomerView
//          MyProject.More.ViewModels.Customers.MasterViewModel -> MyClient1.Customers.Views.MasterView
//          MyProject.ViewModels.Customers.More.OrderHistoryViewModel -> MyClient1.Customers.Views.OrderHistoryView

ViewLocator.AddSubNamespaceMapping(),ViewModelLocator.AddSubNamespaceMapping()

此方法用于通过将给定的子名称空间替换为另一子名称空间,在源名称空间和一个或多个目标名称空间之间添加类型映射。结果类型映射创建了一个转换规则,该规则支持标准类型命名约定,但具有自定义命名空间命名约定。或者,可以为此映射指定自定义视图后缀。

public static void AddSubNamespaceMapping(string nsSource, string[] nsTargets, string viewSuffix = "View")

nsSource:源类型的子名称空间

nsTargets:目标类型为数组的子名称空间

viewSuffix:类型名称的后缀。应该是“视图”或“视图”的同义词。(可选)

public static void AddSubNamespaceMapping(string nsSource, string nsTarget, string viewSuffix = "View")

nsSource:源类型的子名称空间

nsTarget:目标类型的子名称空间

viewSuffix:类型名称的后缀。应该是“视图”或“视图”的同义词。(可选)

此方法支持在nsSource参数中使用通配符(用*)。当nsSource参数使用空字符串(或string.Empty)时,作为nsTarget/nsTargets参数传递的命名空间将追加到源类型的命名空间。当nsSource为空字符串或以通配符开头和结尾时,其行为与AddNamespaceMapping()的行为相同。与AddNamespaceMapping()一样,AddSubNamespaceMapping()方法支持一对多映射。有关说明,请参阅AddNamespaceMapping()的说明。

此方法在配置时为配置对象的ViewSuffixList中的每个视图后缀在内部调用。由DefaultSubNamespaceForViews和DefaultSubNamespaceForViewModels指定的子名称用于映射。如果不需要“视图”和“ViewModels”子名称空间之间的默认映射,则可以使用适当的配置设置来消除直接调用AddSubNamespaceMapping()的需要。

//Add support for Spanish namespaces
ViewLocator.AddSubNamespaceMapping("ModelosDeVistas", "Vistas");
//Resolves: MiProyecto.ModelosDeVistas.Clientes.ClienteViewModel -> MiProyecto.Vistas.Clientes.ClienteViewViewModelLocator.AddSubNamespaceMapping("Vistas", "ModelosDeVistas");
//Resolves: MiProyecto.Vistas.Clientes.ClienteView -> MiProyecto.ModelosDeVistas.Clientes.ClienteViewModel//Wildcard subnamespace mapping
ViewLocator.AddSubNamespaceMapping("*.ViewModels", "ExtLib.Views");
//Resolves: MyCompany.MyApp.SomeNamespace.ViewModels.CustomerViewModel -> ExtLib.Views.CustomerViewViewLocator.AddSubNamespaceMapping("ViewModels.*", "Views");
//Resolves: MyApp.ViewModels.Some.Name.Space.CustomerViewModel -> MyApp.Views.CustomerViewViewLocator.AddSubNamespaceMapping("MyApp.*.ViewModels", "ExtLib.Views");
//Resolves: MyCompany.MyApp.SomeNamespace.ViewModels.CustomerViewModel -> MyCompany.ExtLib.Views.CustomerView

ViewLocator.AddTypeMapping(),ViewModelLocator.AddTypeMapping()

此方法用于添加表示为基于正则表达式的转换的类型映射。结果类型映射创建了一个转换规则,该规则支持标准类型命名约定,但具有自定义命名空间命名约定。或者,可以为此映射指定自定义视图后缀。

public static void AddTypeMapping(string nsSourceReplaceRegEx, string nsSourceFilterRegEx, string[] nsTargetsRegEx, string viewSuffix = "View")

nsSourceReplaceRegEx:源命名空间的RegEx替换模式

nsSourceFilterRegEx:源命名空间的正则表达式筛选器模式

nsTargetsRegEx:目标命名空间的RegEx替换值数组

viewSuffix:类型名称的后缀。应该是“视图”或“视图”的同义词。(可选)

public static void AddTypeMapping(string nsSourceReplaceRegEx, string nsSourceFilterRegEx, string nsTargetRegEx, string viewSuffix = "View")

nsSourceReplaceRegEx:源命名空间的RegEx替换模式

nsSourceFilterRegEx:源命名空间的正则表达式筛选器模式

nsTargetsRegEx:目标命名空间的RegEx替换值

viewSuffix:类型名称的后缀。应该是“视图”或“视图”的同义词。(可选)

有关创建基于正则表达式的转换规则的详细信息,请参阅NameTransformer上的文档。与通过NameTransformer类添加转换规则不同,此方法将命名空间转换与类型名转换分离。此外,它还支持一对多命名空间映射。有关说明,请参阅AddNamespaceMapping()的说明。

//Capture namespace fragment preceding "ViewModels." as "nsbefore"
string subns = RegExHelper.NamespaceToRegEx("ViewModels.");
string rxrep = RegExHelper.GetNamespaceCaptureGroup("nsbefore") + subns;//Output the namespace fragment after "Views." in the target namespace
string rxtgt = @"Views.${nsbefore}";
ViewLocator.AddTypeMapping(rxrep, null, rxtgt);
//Resolves: MyApp.Some.Name.Space.ViewModels.TestViewModel -> Views.MyApp.Some.Name.Space.TestView

02

最后

原文标题:Caliburn.Micro Xaml made easy

原文链接:https://caliburnmicro.com/documentation/custom-conventions

翻译:dotnet编程大全

C#技术群 : 添加小编微信mm1552923,备注:进群!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html 使用ajax php函数吗,php – 为什么用AJAX加载html后jQuery更改函数不起作用?

我加载一个表单并从PHP文件中通过AJAX动态填充select.在实现动态AJAX填充选择之前,我的更改功能正常工作(当用户选择“其他”时,它只显示另一个输入).现在更改功能不起作用.我知道ready函数正在触发,因为jStepper函数运行.我已尝试使用ready函数内外的更改函数.我觉得在AJAX ge…

Asp.net MVC razor语法参考

Razor语法的快捷参考http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx/ 只是copy下来便于查阅&#xff01; I gave a presentation to another team at Microsoft yesterday on ASP.NET MVC and the Razor view engine and someone asked if there wa…

3、Eternal框架-控制器

2019独角兽企业重金招聘Python工程师标准>>> 介绍 MVC&#xff1a;Model-View-Controller&#xff0c;包括三类对象&#xff0c;Model模型对象、View视图表示、Controller控制器。在应用MVC方式以前&#xff0c;通常将这三个对象的功能合到了一起&#xff0c;通过分…

java配置JDK

1、将JDK文件拷入电脑并解压缩 根据系统版本选择JDK版本&#xff0c;并将eclipse解压缩 2、配置系统环境变量 右键我的电脑--属性--高级系统设置--环境变量 新建JAVA_HOME如图所示&#xff08;严格区分大小写&#xff09; 修改环境变量Path 在变量值一栏的最前面加上%JAVA_HOM…

可怕!原来我们看到的世界地图一直都是“错”的!多年的地理白学了...

▲ 点击查看几乎每个家庭都会有两张地图&#xff1a;一张世界地图&#xff0c;一张中国地图。薄薄的两张纸&#xff0c;蕴藏着让每个人学会“看世界”的磅礴力量。哈佛上一任校长&#xff0c;也是300多年来唯一一位女校长德鲁吉尔平福斯特&#xff08;Drew Gilpin Faust&#x…

C# 是否可以将 动态或匿名类型 转成 强类型 ?

咨询区 ProfK假如我有一个匿名类型或者动态类型&#xff0c;它的结构定义和我的一个强类型的结构是一致的&#xff0c;请问 C# 中是否有内置的方法可以强转为指定 强类型 &#xff1f;我知道可以使用 AutoMapper&#xff0c;但这有点重量级了&#xff0c;并且实现起来也稍微繁琐…

退火算法 matlab,模拟退火算法(MATLAB实现).pdf

退火,算法,实现退火,算法,实现退火,算法,实现模拟火算法(MATLAB 实现)实验用例&#xff1a;用模拟退火算法解决如下10 个城市的TSP 问题&#xff0c;该问题最优解为f opt 2.691 。表1 10 个城市的坐标城市 X 坐标 Y 坐标 城市 X 坐标 Y 坐标1 0.6683 0.2536 6 0.2293 0.76102 0…

sudo apt-get update

常见命令: sudo apt-get update sudo apt-get install gcc sudo apt-get install g++ gcc --version g++ --version 要用apt-get这种方式安装LAMP时,最好先运行下面在命令升级自己的系统这样是为了更新源,而如果你找的源不好,可能安装LMAP失败。#sudo apt-get update…

读jquery 权威指南[7]-性能优化与最佳实践

一、优化选择器执行速度 1. 优先使用ID选择器和标记选择器 使用选择器时应该首选ID选择器($("#id"))&#xff0c;其次是标记选择器&#xff08;$("div")&#xff09;&#xff0c;最后再选用class、属性等选择器。避免重复使用ID号修饰ID号&#xff0c;例如…

遍历某个文件夹下的所有文件并格式化显示出来

public class FileList { private static int num;//定义往下循环了多少层 public static void deepList(File file){ if (file.isFile() || file.listFiles().length0) { return; } else { File[] files file.listF…

Spring高级应用之注入各类集合

先定义一个测试类&#xff0c;由于本文将要介绍注入各种集合时如何配置&#xff0c;故这个类包含各种集合&#xff0c;类名和属性名不好取&#xff0c;没有特殊含义&#xff1a; ?123456789public class Test { private List<String> listTest; private Map<String, …

.NET 程序测试 Java 项目 log4j2 是否存在远程代码执行漏洞

最近两天被朋友圈的“Apache Log4j2 远程代码执行漏洞”刷屏了&#xff0c;主要是因为组件存在 Java JNDI 注入漏洞&#xff1a;当程序将用户输入的数据记入日志时&#xff0c;攻击者通过构造特殊请求&#xff0c;来触发 Apache Log4j2 中的远程代码执行漏洞&#xff0c;从而利…

matlab总最近邻法则,MATLAB中最近邻插值算法

一段时间后&#xff0c;我在MATLAB Image Processing Toolbox中通过了imresize功能的代码&#xff0c;为图像的最近邻插值创建了一个简化版本。以下是如何应用于您的问题&#xff1a;%# Initializations:scale [2 2]; %# The resolution scale factors: [rows columns]oldSize…

史上最牛的文科生:法学出身,却发明出十进制计算器,折磨无数人的微积分符号,跨界40多个领域惊艳学术圈

全世界只有3.14 % 的人关注了爆炸吧知识“世界上没有完全相同的两片树叶。”想必大家对这句话耳熟能详&#xff0c;但却不知道这名言背后的作者是谁吧&#xff1f;其实&#xff0c;他就是与牛顿争论微积分优先权大战中的大佬&#xff1a;莱布尼茨。博览群书 天赋异禀1646年&…

如何解决secureCRT里面的The remote system refused the connection.

不废话,先爆照 Ubuntu缺省安装了openssh-client,所以在这里就不安装了,如果你的系统没有安装的话,再用apt-get安装上即可。然后确认sshserver是否启动了: ps -e |grep ssh 如果只有ssh-agent那ss

为operamasks增加HTML扩展方式的组件调用

#为operamasks增加HTML扩展方式的组件调用##背景 之前的[博文](http://www.cnblogs.com/p2227/p/3540858.html)中有提及到&#xff0c;发现easyui中的combobox,datebox,layout都有效率问题&#xff0c;其中layout的问题在[这里](http://www.cnblogs.com/p2227/p/3541162.html)有…

python 带pydev的eclipse无法导入win32api包(或无法导入其他包)

需要重新配置pydev中的python解释器&#xff0c;因为它不会自动更新。 将原先的python.exe先remove掉&#xff0c;再重新new回来&#xff0c;new回来的时候会让你勾选system libs&#xff0c;把你想要更新的勾选上去就可以了。转载于:https://blog.51cto.com/xuewei/1111889

OC之非ARC环境下循环retain问题

观察上述情况&#xff0c;上述就是著名的循环引用问题&#xff0c;对于此类问题&#xff0c;“你包含我&#xff0c;我包含你”&#xff0c;里面相关的对象占用的内存永远回收不了&#xff0c;解决办法很简单&#xff0c;与常规方法不同。正常情况下&#xff0c;我们应在Person…

我的开源故事

| 作者&#xff1a;李扬| 编辑&#xff1a;钱奕| 设计&#xff1a;杨敏| 责编&#xff1a;钱英宇一、前 言我相信我与开源故事的开始并不是第一次用GitHub或者CSDN&#xff0c;而是突如其来的新冠疫情。2020年1月25日&#xff0c;大年初一&#xff0c;范晶晶的一条关于wuhan202…

matlab 类 使用,matlab中sortrows的用法

sortrows有三种用法&#xff1a;B sortrows(A)B sortrows(A,column)[B,index] sortrows(A,...)我们先创建一个矩阵Afloor(gallery(uniformdata,[6 7],0)*100);A(1:4,1)95; A(5:6,1)76; A(2:4,2)7; A(3,3)73A 95 45 92 41 13 1 8495 7 73 89 20 74 5295 7 73 5 19 44 2095 7 …