Project1

标题: 垃圾…………(自己写的ruby功能中使用迭代器) [打印本页]

作者: Iselia雪    时间: 2008-4-17 02:58
提示: 作者被禁止或删除 内容自动屏蔽
作者: 神思    时间: 2008-4-17 03:21
对了问个问题``
yield返回的是啥..?

对迭代器不太了解

def orz
  yield "otz"
  yield "otz"
end
orz{ |j| p j }

貌似是yield的时候将值传递到块中...
但不像return返回

唯一试过用的方法就是酱紫...
class Game_Actor
  def get_armors
    yield $data_armors[@armor1_id] if @armor1_id != 0
    yield $data_armors[@armor2_id] if @armor2_id != 0
    yield $data_armors[@armor3_id] if @armor3_id != 0
    yield $data_armors[@armor4_id] if @armor4_id != 0
  end
end

actor.get_armors{ |armor| armor.name }............
有时候还是会有一点方便的```
作者: Iselia雪    时间: 2008-4-17 03:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: Iselia雪    时间: 2008-4-17 03:40
提示: 作者被禁止或删除 内容自动屏蔽
作者: 沉影不器    时间: 2008-4-17 04:35
提示: 作者被禁止或删除 内容自动屏蔽
作者: Iselia雪    时间: 2008-4-17 04:37
提示: 作者被禁止或删除 内容自动屏蔽
作者: 沉影不器    时间: 2008-4-17 04:51
提示: 作者被禁止或删除 内容自动屏蔽
作者: Iselia雪    时间: 2008-4-17 05:05
提示: 作者被禁止或删除 内容自动屏蔽
作者: 禾西    时间: 2008-4-17 06:05
yield 簡單來說就是把「某個元素」(比如神思的 "otz",沉影的[nil,nil,nil,nil,nil,nil,nil])「丟出」迭代的「過程」……
作者: 沉影不器    时间: 2008-4-17 06:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: Iselia雪    时间: 2008-4-17 06:27
提示: 作者被禁止或删除 内容自动屏蔽
作者: 神思    时间: 2008-4-17 06:36
yield返回的就是每次运算的值


每次运算的值.?
def orz(n)
  yield n
end
orz(1){ |a| a > 0 }
是不是这样yield就返回真?
作者: Iselia雪    时间: 2008-4-17 06:51
提示: 作者被禁止或删除 内容自动屏蔽
作者: link006007    时间: 2008-4-17 07:04
yield 感觉上像STL的模板函数 传参像是 类型和对象指针, 语句块相当于函数指针
yield 保存最近一次执行时语句块中的最后的一个值
def iterate_actor
    for actor in $game_party.actors
        p yield actor
    end
end
iterate_actor { |actor| actor.hp -= 50 }
iterate_actor { |actor| actor.name }
作者: bbschat    时间: 2008-4-17 07:21
Array 用 reject 或者 delete_if 可以达到同样的效果

例: 将1至10里面能被 3 整除的数去掉

(1..10).reject {|i|  i % 3 == 0 }  

结果 [1, 2, 4, 5, 7, 8, 10]
作者: orochi2k    时间: 2008-4-19 01:58
以下引用神思于2008-4-16 19:21:09的发言:

对了问个问题``
yield返回的是啥..?

对迭代器不太了解

def orz
yield "otz"
yield "otz"
end
orz{ |j| p j }

貌似是yield的时候将值传递到块中...
但不像return返回

唯一试过用的方法就是酱紫...
class Game_Actor
def get_armors
   yield $data_armors[@armor1_id] if @armor1_id != 0
   yield $data_armors[@armor2_id] if @armor2_id != 0
   yield $data_armors[@armor3_id] if @armor3_id != 0
   yield $data_armors[@armor4_id] if @armor4_id != 0
end
end

actor.get_armors{ |armor| armor.name }............
有时候还是会有一点方便的```


[本贴由作者于 2008-4-16 19:24:46 最后编辑]

对某书的YY解释认为,貌似返回块的最后一句做的东东....
作者: 沉影不器    时间: 2008-4-19 19:01
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1