与方法 requireNonNull(java.lang.Object,java.lang.String) 不同,此方法允许将消息的创建推迟到进行空值检查之后。 虽然这可能会在非空情况下带来性能优势,但在决定调用此方法时,应注意创建消息提供者的成本低于直接创建字符串消息的成本。
编程后如何用modelsim 6.2b仿真Verilog
1.新建一个工程file -> new -> project...此时会弹出一个Creat Project对话框,输入一个工程名,选择保存路径 (不要包含中文),其他默认就行了;2.点OK后会弹出一个Add items to the Project,里面有几个可选项,应该很容易明白;3.添加好文件后,点close把Add items to the Project对话框关闭,这时在左侧的workspace的project窗口里可以看到刚才添加的文件,双击可以打开这些文件进行编辑,编辑好后保存;4.右击刚才编辑好的文件compile -> compile select(或根据自己需要选其他项),如果没有错误,则在底部的命令窗口可以看到编译成功的消息(呈绿色),否则会出现出错的消息(呈红色),双击它会弹出一个更具体的窗口提示你出错的地方.5.修改所有错误直到编译成功.这时可以在菜单栏选择Simulation -> Start simulatio... 这时会弹出一个Start simulatio的对话框,在Design的标签下你会看到有很多库,展开work库会看到刚才编译成功的文件(如果有多个文件的话选择一个你想仿真的,比如测试程序,这时底部的OK会由刚才的不可用变成可用的),然后把Opitimization选项下的Enable opitimization前复选取消(这样可以保证过会儿所有的输入输出都可以看到,可以试试不取消这项有何区别),然后点OK就行了.6.选择view -> Objects就可以看到你想仿真的各个量,选中它们并右击Add to wave -> Selected signals,这时就会弹出一个波形仿真窗口.如果你的测试文件写得没问题的话就可以看到仿真波形,也可以观察底部的命令窗口察看相关信息.7.如果没写测试文件的话,在波形仿真窗口右击相关信号,选择force...设置想仿真的值或clock...把该量设置为时钟,然后点工具栏上的Run或Simulation菜单下的Run.
EF中Add和Attach两种添加数据方法的区别
最近在开发一个项目,在实现某个模块数据的插入操作时(底层数据库的交互采用的是EF),发现无论如何数据都不能插入成功,把数据拷贝出来放到数据库中执行Sql语句时却能正确插入,下面给出代码片段public int InsertWithFundInfo(F_WithFunding_Info withinfo){int res = 0;using (var context = new RenRenChaoContext()){context.F_WithFunding_(withinfo);return res = ();}}核心也就是两段代码,就是不知道问题出在了哪里。 后来想起EF插入数据还有一个Add方法,于是抱着侥幸的心理试了试,结果竟然成功了。 public int InsertWithFundInfo(F_WithFunding_Info withinfo){int res = 0;using (var context = new RenRenChaoContext()){context.F_WithFunding_(withinfo);//context.F_WithFunding_(withinfo); return res = ();}在网上搜了一番,发现虽然两者都可以用来插入数据,不过还是有一些细微的差别。 在讲解差别之前,我们先来看下命名空间下的描述实体所处状态的枚举类型EntityState: // 摘要://实体对象的状态。 [Flags]public enum EntityState{// 摘要:// 对象存在,但未由对象服务跟踪。 在创建实体之后、但将其添加到对象上下文之前,该实体处于此状态。 通过调用 ()// 方法从上下文中移除实体后,或者使用 // 加载实体后,该实体也会处于此状态。 Detached = 1,//// 摘要:// 自对象加载到上下文中后,或自上次调用 () 方法后,此对象尚未经过修改。 Unchanged = 2,//// 摘要:// 对象已添加到对象上下文,但尚未调用 () 方法。 对象是通过调用// (,)// 方法添加到对象上下文中的。 Added = 4,//// 摘要:// 使用 () 方法从对象上下文中删除了对象。 Deleted = 8,//// 摘要:// 对象已更改,但尚未调用 () 方法。 Modified = 16,}这五种状态分别是:Detached-游离;UnChanged-没有变化;Added-添加;Deleted-删除;Modified-编辑。 Detached状态下的Entity不会被上下文(context)所捕获(track)。 当SavaChanged()方法执行期间,他会查看当前Entity的EntityState的值,决定是去新增(Added)、修改(Modified)、删除(Deleted)、什么也不做(UnChanged)。 ()Attach在 微软的中文翻译中是附加,不同于Add方法的添加,她是将一个处于Detached的Entity附加到上下文,而附加到上下文后的这一Entity的State为UnChanged。 传递到Attach方法的对象必须具有有效的EntityKey值。 如果该对象不具有有效的EntityKey值,请使用AttachTo方法指定实体集的名称。 2、Add()MSDN的解释:Add方法将对象将一个对象添加到集合中,添加到EntityCollection并创建两个对象之间的关系。 当源对象附加到ObjectContext实例时,方法也将对象添加到ObjectContext当调用SaveChanges时,此操作转换为插入到数据源中的操作。 自我理解:ObjectContext类的Add()方法的作用就是将一个Entity的State修改为Added,这样在SavaChanged()方法就会将实体新增到数据库当中这样,在上面的程序中通过调用Attach()方法只能把对象添加到了对象上下文中(此时对象的状态已经是Unchanged的),执行SaveChange()方法并不能真正添加到数据库中去。 要想真正执行还需要添加一个修改实体状态的代码。 (withinfo,);调用Add()方法时其实已经隐藏了修改实体的状态为Added的这个操作,执行SaveChange()方法就可以进行新增的操作。
makefile中ifeq,ifneq,ifDEF和ifndef的区别与用法
makefile中ifeq,ifneq,ifdef和ifndef的区别与用法使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支。
条件表达式可以是比较变量的值,或是比较变量和常量的值。
一、示例 下面的例子,判断$(CC)变量是否“gcc”,如果是的话,则使用GNU函数编译目标。
libs_for_gcc = -lgnu normal_libs = foo: $(objects) ifeq ($(CC),gcc) $(CC) -o foo $(objects) $(libs_for_gcc) else $(CC) -o foo $(objects) $(normal_libs) endif 可见,在上面示例的这个规则中,目标“foo”可以根据变量“$(CC)”值来选取不同的函数库来编译程序。
我们可以从上面的示例中看到三个关键字:ifeq、else和endif。
ifeq的意思表示条件语句的开始,并指定一个条件表达式,表达式包含两个参数,以逗号分隔,表达式以圆括号括起。
else表示条件表达式为假的情况。
endif表示一个条件语句的结束,任何一个条件表达式都应该以endif结束。
当我们的变量$(CC)值是“gcc”时,目标foo的规则是: foo: $(objects) $(CC) -o foo $(objects) $(libs_for_gcc) 而当我们的变量$(CC)值不是“gcc”时(比如“cc”),目标foo的规则是: foo: $(objects) $(CC) -o foo $(objects) $(normal_libs) 当然,我们还可以把上面的那个例子写得更简洁一些: libs_for_gcc = -lgnu normal_libs = ifeq ($(CC),gcc) libs=$(libs_for_gcc) else libs=$(normal_libs) endif foo: $(objects) $(CC) -o foo $(objects) $(libs) 二、语法 条件表达式的语法为:














发表评论