理解do-end块中的ruby语法
我最近开始学习ruby,并在做一些涉及数组的研究时,看到了这行代码:理解do-end块中的ruby语法,ruby,arrays,syntax,Ruby,Arrays,Syntax,我最近开始学习ruby,并在做一些涉及数组的研究时,看到了这行代码: array.map!{ |i| i.is_a?(Integer) ? (i + number) : i } 我试图概念化,更好地理解这条线的每一部分的含义。有人能解释一下我是如何用do end而不是{}来写这篇文章的吗?在(整数)后面的“?”和在(I+number)后面的“:”在单词中是什么意思?非常感谢 {}与do/end完全相同,?和:的工作方式类似于if/else块,因此代码也可以写成 array.map! do |i
array.map!{ |i| i.is_a?(Integer) ? (i + number) : i }
我试图概念化,更好地理解这条线的每一部分的含义。有人能解释一下我是如何用do end而不是{}来写这篇文章的吗?在(整数)后面的“?”和在(I+number)后面的“:”在单词中是什么意思?非常感谢
{}
与do/end完全相同,?
和:
的工作方式类似于if/else块,因此代码也可以写成
array.map! do |i|
if i.is_a?(Integer)
i + number
else
i
end
end
.map
是Ruby中数组
类型的方法。它表示根据给定的块参数映射数组的每个元素。Ruby中的块参数接受它自己的参数(用|…|
分隔),因此您可以传入相关数组元素的值。在这种情况下,|i |
给出一个块变量,i
,表示正在计算的数组的当前元素的值
结果将是一个元素数相同的数组,但每个元素都是原始数组中每个对应元素的映射结果,array
。解释点(!
)意味着用结果替换数组
元素,而不是用结果返回新数组。您还可以执行,array.map{…
,这将产生相同的结果,但不会改变array
;结果将是一个新的数组
块由{}
分隔,可以在单独的行上用do
和end
表示:
array.map! do |i|
i.is_a?(Integer) ? (i + number) : i
end
使用{}
和do end
在行为上没有区别
?:
是三元if-then-else,就像在C中一样。所以exp1?exp2:exp3
说,如果exp1
是真的,那么就执行exp2
否则执行exp3
。那么,上述操作相当于:
array.map! do |i|
if i.is_a?(Integer) then
i + number
else
i
end
end
在任何一种情况下,if-then-else表达式的值都是在执行的分支中执行的最后一条语句的值。这就是为给定元素i
执行块而返回的结果。因此,整个映射的结果是替换a中类Integer
的每个元素带索引的rray加上数字的任何变量(希望也是数值类的变量)。如果元素不是整数
,则只替换为其索引。感谢您的深入解释,它确实帮助我理解了代码行的每一部分!
array.map! do |i|
if i.is_a?(Integer) then
i + number
else
i
end
end