【软件库源码 iapp源码】【rsi抓黑马源码】【目录列表源码Files】result源码

来源:touchwiz源码

1.Struts 2的Result Type
2.lodash源码解析:reject、源码remove、源码repeat、源码replace、源码result...

result源码

Struts 2的Result Type

       åœ¨é»˜è®¤æ—¶ï¼Œ<result>标签的type属性值是“dispatcher”(实际上就是转发,forward)。开发人员可以根据自己的需要指定不同的类型,如redirect、stream等。如下面代码所示:

       <result name=save type=redirect>

       /result.jsp

       </result>

       è¿™æ­¤result-type可以在struts2-core-2.0..1.jar包或struts2源代码中的struts-default.xml文件中找到,在这个文件中找到<result-types>标签,所有的result-type都在里面定义了。代码如下: <result-types><result-type name=chain class=com.opensymphony.xwork2.ActionChainResult/><result-type name=dispatcher class=org.apache.struts2.dispatcher.ServletDispatcherResult default=true/><result-type name=freemarker class=org.apache.struts2.views.freemarker.FreemarkerResult/><result-type name=.opensymphony.xwork2.ActionChainResultchain其实只是在一个action执行完毕之后,forward到另外一个action,所以他们之间是共享HttpServletRequest的。在使用chain作为Result时,往往会配合使用ChainingInterceptor。ChainingInterceptor的作用是在Action直接传递数据。事实上,源Action中ValueStack的数据会被做一次Copy,这样,2个Action中的数据都在ValueStack中,使得对于前台来说,通过ValueStack来取数据,是透明而共享的。比如说,一张页面中,你可能有许多数据要显示,而某些数据的获取方式可能被很多不同的页面共享(典型来说,“推荐文章”这个小栏目的数据获取,可能会被很多页面所共享)。这种情况下,可以把这部分逻辑抽取到一个独立Action中,并使用chain,将这个Action与主Action串联起来。这样,最后到达页面的时候,页面始终可以得到每个Action中的数据。

       ä»Žå®žæˆ˜ä¸Šè®²ï¼Œä½¿ç”¨chain作为Result也的确存在着上面所说的许多问题,我个人也是非常不推崇滥用这种Result。尤其是,对于使用Spring和Hibernate的朋友来说,如果你开启OpenSessionInView模式,那么Hibernate的session是跟随HttpServletRequest的,所以session在整个action链中共享。这会为我们的编程带来极大的麻烦。因为我们知道Hibernate的session会保留一份一级缓存,在action链中,共享一级缓存无疑会为你的调试工作带来很大的不方便。

       æ‰€ä»¥ï¼Œè°¨æ…Žä½¿ç”¨chain作为你的Result,应该成为一条最佳实践。 重定向到一个URL org.apache.struts2.dispatcher.ServletRedirectResult如果你在Action执行完毕后,希望执行另一个Action,有2种方式可供选择。一种是forward,另外一种是redirect。有关forward和redirect的区别,这里我就不再展开,这应该属于Java程序员的基本知识。在Struts2中,分别对应这两种方式的Result,就是chain和redirect。

       å…ˆæ¥è°ˆè°ˆredirect,既然是重定向,那么源地址与目标地址之间是2个不同的HttpServletRequest。所以目标地址将无法通过ValueStack等Struts2的特性来获取源Action中的数据。

       åŒæ—¶ï¼ŒRedirect的Result支持在配置文件中,读取并解析源Action中ValueStack的值,并成为参数传递到Redirect的地址中。 重定向到一个Action org.apache.struts2.dispatcher.ServletActionRedirectResult

lodash源码解析:reject、源码remove、源码软件库源码 iapp源码repeat、源码replace、源码result...

       本文解析 lodash 中的源码 R 开头零散小方法,包括 reject、源码remove、源码repeat、源码replace、源码result、源码round。源码rsi抓黑马源码将从变参函数处理、lodash 实现细节、依赖方法 negate、核心方法 random、reject、remove、repeat、目录列表源码Filesreplace、result、round,直至原生实现进行深入剖析。

       对变参的处理:随机方法 random 的实现思路巧妙,涉及多种情况处理,如参数长度与类型判定。龙岗和南山源码

       lodash 实现时对参数处理复杂,采用灵活策略,如依据参数长度与类型进行分类处理。

       试验显示,随机方法 random 的 lodash 实现与原始 Math.random 相匹配。

       依赖的 lodash 方法 negate:一个接收函数作为参数并返回结果取反的函数。

       filter 方法:用于筛选数组元素,源码里面怎么杀毒返回符合特定条件的元素。

       random 方法:对 Math.random 的封装,用于生成指定范围内的随机数。

       reject 方法:实现 filter 的相反功能,返回数组中不符合特定条件的元素。

       remove 方法:在原数组中删除指定元素,返回删除元素形成的数组。

       repeat 方法:采用快速幂算法实现元素重复,提高效率。

       result 方法:类似 get 方法,实现简洁高效,尽量减少变量定义。

       round 方法:实现带精度的四舍五入,通过 createRound 方法实现,支持不同近似函数。

       createRound() 方法:接收参数 floor、ceil、round,返回相应近似函数。

       带 e 显示的浮点数处理与不带 e 的处理过程不同,后者通常涉及更直接的数值操作。

       原生实现:repeat、replace、round 方法是 ECMAScript 中 String.prototype 的原生实现,可直接使用。

       remove 和 result 方法的原生实现需遵循 lodash 类似的思路,以优化性能与代码简洁性。

       以 reject 方法为例,其核心逻辑通过创建一个 complement 函数实现,该函数接收一个函数 f 作为参数,返回新的函数执行时返回的结果为 !f(...args),从而实现功能。

文章所属分类:百科频道,点击进入>>