Ruby 从块内访问我正在调用的“select”对象
这将是一个有助于说明这一点的结构示例。尽管请注意,我的目标不是完成本例的特定逻辑,而是了解如何在此上下文中访问该对象 “0234”。拆分。每个索引都要|Ruby 从块内访问我正在调用的“select”对象,ruby,Ruby,这将是一个有助于说明这一点的结构示例。尽管请注意,我的目标不是完成本例的特定逻辑,而是了解如何在此上下文中访问该对象 “0234”。拆分。每个索引都要| 放置“self”[i]完全不需要使用索引: st='0234' st.each_char do |chr| puts chr end 关于评论: st='0234' st.each_char.with_index do |chr, idx| puts idx puts chr end 我感到一定程度的沮丧,因为你觉得自己缺少一些
放置“self”[i]完全不需要使用索引:
st='0234'
st.each_char do |chr|
puts chr
end
关于评论:
st='0234'
st.each_char.with_index do |chr, idx|
puts idx
puts chr
end
我感到一定程度的沮丧,因为你觉得自己缺少一些基本的东西。让我们从返回原始代码开始,看看发生了什么。你有:
st = '0234'
a = st.split('') # ["0", "2", "3", "4"]
a.each_index.select do |i|
puts a[i]
end
试试这个:
a.each_index #=> <Enumerator:["0","2","3","4"]:each_index>
a.each_index.to_a #=> [0, 1, 2, 3]
a.each_index { |i| puts i } #=> ["0","2","3","4"]
与此进行比较:
b = %w{I love chocolate cake} #=> ["I","love","chocolate","cake"]
b.each_index #=> <Enumerator:["I","love","chocolate","cake"]:each_index>
b.each_index.to_a #=> [0, 1, 2, 3]
b.each_index { |i| puts i } #=> ["I","love","chocolate","cake"]
看看发生了什么?在这两种情况下,枚举数都是将a和b元素的索引传递给块,而不是将元素传递给块
现在考虑以下内容:
a.each_index.select { |i| i > 1 } #=> [2,3]
b.each_index.select { |i| i > 1 } #=> [2,3]
这两个选项都选择块i>1中表达式计算为true的索引i
最后,将其与:
a.each_with_index #=> <Enumerator:["0","2","3","4"]:each_with_index>
a.each_with_index.to_a #=> [["0",0], ["2",1], ["3",2], ["4",3]]
b.each_with_index
#=> <Enumerator:["I","love","chocolate","cake"]:each_with_index>
b.each_with_index.to_a #=> [["I",0],["love",1],["chocolate",2],["cake",3]]
a.each_with_index.select { |e,i| i > 1 } #=> [[3,2],[4,3]]
b.each_with_index.select { |e,i| i > 1 } #=> [["chocolate",2],["cake",3]]
我希望这有帮助。不要犹豫问问题。好吧,我真的不想提chr,我简化了问题以便集中精力。我实际上会想要索引。更新的答案,如果你想访问st,你不需要使用self,st在每个区块的范围内。请从下次开始在问题中提出你的要求。问题的标题没有改变,这正是我想知道的!这就是否决票的意义吗?使用select的目的是什么?你的代码示例,与方法selects usecase不符..vint-i-vuit,我同情你要求解释否决票的原因,但是当有否决票时,当然当有不止一个否决票时,你通常可以从评论中找出问题所在。在这里,您不应该通过引用代码来解释您想要做什么。用文字表达,准确、简洁、完整,并在有帮助时添加样本输入和输出。这里的示例输入是st=0234。您希望该方法打印和/或返回什么?不要说这是显而易见的。事实并非如此。我建议你编辑你的问题帖子投票!为了避免额外的下行投票。@vint-i-vuit,您的目标是在块内提供一个引用接收器的变量吗?如果是这样,请详细说明您试图解决的具体问题。包含随机码不可能得到令人满意的答案。使用v1.9+是否符合您的要求?”0234'.split.tap{| a | a.每个|索引{| i |放置一个[i]}打印0,2,3和4,并返回[0,2,3,4]。感谢您的详细评论!我想做的是访问a或bi.e。在块内引用方法接收器的变量,但不使用变量a或b。也就是说,`%w{I love chocolate cake}。每个_都有_索引。选择{e,I{124;访问%w{I love…}这里}`。我相信扎克坎普在评论中解释得很清楚。
a.each_index.select { |i| i > 1 } #=> [2,3]
b.each_index.select { |i| i > 1 } #=> [2,3]
a.each_with_index #=> <Enumerator:["0","2","3","4"]:each_with_index>
a.each_with_index.to_a #=> [["0",0], ["2",1], ["3",2], ["4",3]]
b.each_with_index
#=> <Enumerator:["I","love","chocolate","cake"]:each_with_index>
b.each_with_index.to_a #=> [["I",0],["love",1],["chocolate",2],["cake",3]]
a.each_with_index.select { |e,i| i > 1 } #=> [[3,2],[4,3]]
b.each_with_index.select { |e,i| i > 1 } #=> [["chocolate",2],["cake",3]]