Ruby的inject方法,一开始不好扭转思维。
inject是我最喜欢用的方法,因为它可以使如下的代码变的更漂亮:
arr1 = []
arr2 = [1,2,3]
arr2.each do |i|
arr1 << i + 1
end
p arr1
#=> [2, 3, 4]
使用inject:
arr = arr2.inject([]) do|arr1, i|
arr1 << i + 1
end
p arr
#=>[2,3,4]
但是,如果这么写:
arr = arr2.inject([]) do |arr1,i|
arr1 << i+1 if i%2 == 0
end
就会报错: undefined method `<<' for nil:NilClass
这是值得注意的地方,起码是我常犯错的一个地方。
inject([]) do |item ,i |这样的写法,每一步,item都会被设置为block的返回值。上面的例子里,第一步if语句显然返回了nil,所以当执行第二步迭代的时候,自然给nil对象调用了<< 这个方法,就报错了!
这个问题怎么解决 ?
当然在判断条件为false的情况下返回当前的这个item值就ok了,像下面这样:
arr = arr2.inject([]) do |arr1,i|
(i%2) == 0 ? (arr1 << i+1) : arr1
end
完了来回顾一下inject方法两种用法:
enum.inject(init_value) {|memo,obj| block}
enum.inject{ |memo,obj| block }
第一种,memo以init_value为初始值
第二种,memo以enum里的第一个元素为初始值。
--这里memo是memory的意思,起到了缓存的作用。最终返回这个值。
from:http://blackanger.blog.51cto.com/140924/90539
T
8
分享到:
相关推荐
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
1.provide 和 inject 的讲解 provide和inject可以实现嵌套组件之间进行传递数据。 这两个函数都是在setup函数中使用的。 父级组件使用provide向下进行传递数据; 子级组件使用inject来获取上级组件传递过来的数据...
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