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
分享到:
相关推荐
在本文中,我们将深入探讨javax.inject的核心概念、使用方法以及与Hibernate框架的集成。 一、javax.inject简介 javax.inject包提供了三个主要的注解:@Inject、@Named和@Provider。这些注解帮助开发者声明和管理...
VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码源)VC代码 RT_INJECT (实用代码...
2. **@Inject注解**:这是`javax.inject.Inject`中的核心注解,用于标记构造器、字段或方法,表示该构造器、字段或方法需要被依赖注入框架自动填充其依赖对象。 3. **@Named注解**:此注解用于为注入的对象指定一个...
Usage: injectdll.exe [process name] [dll path] [option number]option 1 - CreateRemoteThreadoption 2 - NtCreateThreadExoption 3 - RtlCreateUserThread
此外,Enumerable模块是一组用于遍历和操作集合的强大工具,它包含的`inject`和`reduce`方法可以执行聚合操作,`group_by`则可以按条件对元素分组。 Ruby的模块(Module)和类(Class)系统使得代码组织和复用变得...
2. **Ruby Reduce**: Reduce(也称为fold或inject)函数用于对数组的所有元素进行累积操作,通常用于聚合操作,如求和、乘积或计算平均值。例如,计算数组元素的总和: ```ruby numbers = [1, 2, 3, 4, 5] sum =...
Spring 依赖的 javax.inject.Provider
官网上说provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的属性还是可响应的。 provide: Object | () => Object(一个对象或返回一个对象的函数) inject...
除了`each`方法,Parallel库还提供了其他方法,如`map`、`inject`等,这些都是并行版本的内置Ruby方法,方便在并行环境下使用熟悉的编程模式。 在实际应用中,理解并行处理的潜在问题也至关重要,如数据竞争、死锁...
`javax.inject.Inject`注解是最核心的注解,它用于标注一个构造函数、字段或方法,表明这个构造函数、字段或方法的依赖应该由外部容器(如Google Guice、Spring框架等)自动注入,而不是由类自己创建。通过这种方式...
1.provide 和 inject 的讲解 provide和inject可以实现嵌套组件之间进行传递数据。 这两个函数都是在setup函数中使用的。 父级组件使用provide向下进行传递数据; 子级组件使用inject来获取上级组件传递过来的数据...
总之,这个压缩包包含的“inject.dmg”和“inject.dmg.signature”文件是iOS 13系统定位服务驱动的更新,提供增强的定位功能和安全性。在使用时,用户需要验证签名以确保文件的合法性,并根据设备的当前iOS版本进行...
《自动注入工具——AutoInject小析》 在网络安全领域,DLL注入是一种常见的技术,它允许一个进程将自身的代码注入到另一个进程中执行,从而实现各种目的,如监控、调试或者恶意攻击。本文主要针对名为"AutoInject...
code inject 逆向工程 做一些工具必备
2. **inject2download**:可能是指一种能够利用HTTP注入下载远程文件的方法或工具。 3. **http_inject**:强调了HTTP协议层面的注入活动。 4. **inject**:通用术语,表示注入行为,可能包括多种类型的注入攻击。 ...
sisu-inject-bean-1.4.2.jar
本文将围绕标题为"dirver-inject.rar_inject_sudami inject"的恶意代码进行探讨,深入分析其技术特性、潜在威胁及应对策略。 从描述来看,"dirver-inject.rar_inject_sudami inject"所指的是一种能感染Windows系统...
`fast-ruby` 比较了`map`、`each_with_object` 和`inject` 等方法,解释了何时选择哪种方式会更高效。 4. **条件语句与逻辑运算符** `if` 和 `unless` 语句在Ruby中广泛使用,但它们的替代品,如三元运算符和逻辑...
1. `@Inject`:这是最基础的注解,用于标记一个字段、构造函数或者方法参数,表示该成员需要被依赖注入。容器会在运行时自动提供合适的实例。 2. `@Named`:这个注解用于为注入的对象指定一个唯一的名称。在有多个...