From:http://blog.jayfields.com/2008/03/ruby-inject.html
实体分析
- [1, 2, 3, 4].inject(0) { |result, element| result + element }
inject带有一个参数和block。block中的两个参数是有含义的。第一个参数reslut在inject第一次执行block时把inject带的参数赋值给它,element就是数组中的元素,该例中inject一共执行4次block(次数更据元素长度定义),每次执行block完后,最后语句的结果再赋值给result,直到遍历数组中所有元素。我们深入这个例子看每一步执行的结果。
因为数组有4个元素,所以要执行4次block操作:
第一次操作:result=0,既等于inject带的参数;element=1,既第一个元素;执行block后result + element =1,再把这个结果付值给result,所以在执行完第一次block后,result = 1。
第二次操作:result=1,既上次运行block后的最后一条语句的结果;element=2,既第二个元素;执行block后付值result=3。
如此类推,直到最后一次执行完block,生产的值为10。就是inject的返回值了。
inject可以不带参数,此时result的初始值为数组元素的第一个值。所以上例可改写成:
- [1, 2, 3, 4].inject{ |result, element| result + element }
这时执行block的次数为3次。
文章中还提到也其它用法:
- hash = [[:first_name, 'Shane'], [:last_name, 'Harvie']].inject({}) do |result, element|
- result[element.first] = element.last
- result
- end
-
- hash
把array转换成hash表。有也第一个例子的基础,这个例子应该很容易看得懂。
再看一个例子,需要对一数组元素进行过滤并进行一些加工,
- [1, 2, 3, 4, 5, 6].select { |element| element % 2 == 0 }.collect { |element| element.to_s }
上面代码实现选取数组中的偶数,并把它们转换成字符型。用inject如何实现呢?
- array = [1, 2, 3, 4, 5, 6].inject([]) do |result, element|
- result << element.to_s if element % 2 == 0
- result
- end
-
- array
分享到:
相关推荐
VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码...
Usage: injectdll.exe [process name] [dll path] [option number]option 1 - CreateRemoteThreadoption 2 - NtCreateThreadExoption 3 - RtlCreateUserThread
官网上说provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的属性还是可响应的。 provide: Object | () => Object(一个对象或返回一个对象的函数) inject...
javax.inject.jar java 开发技术要用到,打包分享给大家,需要的下载学习哈!
Spring 依赖的 javax.inject.Provider
code inject 逆向工程 做一些工具必备
javax-inject-1.0-201002241208.jar.zip
官方jar包 javax-inject.jar
sisu-inject-bean-1.4.2.jar
Dll注入 InjectDLL 一个把DLL注入到其它进程的程序
支持注入,spring ,类别注入,很好用的jar包,还有原码和文档
Location IOS12.2驱动版本,包含inject.dmg和inject.dmg.signature两个文件
javax.inject_1.0.0.jar
Location IOS13驱动版本,包含inject.dmg和inject.dmg.signature两个文件
linux-inject-master,linux注入so,类似于windows的远程线程注入,函数hook等; https://github.com/gaffe23/linux-inject
Location IOS13.4驱动版本,包含inject.dmg和inject.dmg.signature两个文件
Inject shell code into user mode process from ring 0 via APC
cookies & inject browser下载方式
Inject Payload to HTTP Server