Project1

标题: 怎么理解 |actor| ? [打印本页]

作者: kvkv97    时间: 2019-8-24 17:17
标题: 怎么理解 |actor| ?
在Interpreter 6中,
iterate_actor(@parameters[0]) do |actor|
怎么理解|actor|?  “|”;里面的|在键盘什么位置?
在Interpreter 1中
  def iterate_actor(parameter)
    # 全体同伴的情况下
    if parameter == 0
      # 同伴全体循环
      for actor in $game_party.actors
        # 评价块
        yield actor
      end
    # 单体角色的情况下
    else
      # 获取角色
      actor = $game_actors[parameter]
      # 获取角色
      yield actor if actor != nil
    end
  end
怎么理解 yield actor?
作者: kvkv97    时间: 2019-8-24 17:21
符号||是哪个键盘打出来的?
作者: hyrious    时间: 2019-8-24 18:15
1. do |args| ... end 或者 { |args| ... } 中 |args| 就是代入定义时 yield 后面的东西,例如
  1. def f
  2.   yield 1
  3.   yield "喵喵喵"
  4.   yield
  5. end
  6. f { |x| print "我拿到了 #{x.inspect}" }
  7. #=>
  8. 我拿到了 1
  9. 我拿到了 "\u55B5\u55B5\u55B5"
  10. 我拿到了 nil
复制代码

2. 如果是标准美式(中式)键盘,在回车键上方有一个「 \ 」键,按住 shift 按下它就可以打出 |
日文键盘应该在上面一行数字键的最后,按住 shift 按「 ¥ 」键

作者: taeckle    时间: 2019-8-25 04:27
请教一下那个yield又是什么意思啊?可以举个例子吗?

作者: fux2    时间: 2019-8-25 09:36
taeckle 发表于 2019-8-25 04:27
请教一下那个yield又是什么意思啊?可以举个例子吗?

相当于js里的调用传入的回调函数

ruby代码
  1. class Array
  2.   def process_first
  3.     yield self.first
  4.     self[0] *= 2
  5.   end
  6. end

  7. [2,3,4].process_first do |num|
  8.   p num
  9. end
复制代码


js代码
  1. Array.prototype.process_first = function(callback) {
  2.     callback(this[0]);
  3.     this[0] *= 2;
  4. };

  5. [2,3,4].process_first(function(num) {
  6.     console.log(num);
  7. });
复制代码

作者: kklt    时间: 2019-8-25 13:54
本帖最后由 kklt 于 2019-8-25 13:55 编辑

迭代器(Iterator)

迭代作动词时指: 反复、重复,对应英文 iterate ;作名词时对应英文 iteration 。根据前述字源,迭代器意为一种会反复做相同工作的事物,对应英文 iterator 。在 Ruby 中,每个迭代器都是一种个体的方法。

语法:

個體.迭代器 do |參數|
   ...程式區塊...
end

個體.送代器 { |參數|
   ...程式區塊...
}

范例:

5.times do |c|
   puts c
end

如上例,times 是一个迭代器(iterator),会做 5 次迭代(iteration)。

撰写程式码时,常有各式各样的情形需要循环处理。在 C 语言中,我们用 for 或 while。例如:

for (str = "abcdefg"; *str != '\0'; str++) {
    /* 處理動作 */
}

C 语言的 for(...) 语法帮助我们建立抽象的循环动作,但仍要求程序员了解字串内部结构的细节,才能写出测试 *str 是否为 null 字元的程式码。这使得 C 语言感觉像是低阶语言。高阶语言应提供更有弹性的迭代。看看下列的 sh 指令手稿的做法:

#!/bin/sh
for i in *.[ch]; do
    # ... 針對每一個檔案做某件事
done

yield

我们可将一个程式码区块传递给迭代器,并于迭代器中以 yield 叙述将程式流程转移至该程式码区块。下列范例定义了名为 repeat 的迭代器,它会依据引数所指定之次数,反复执行程式码区块内容。

def repeat(num)
     while num > 0
         yield
         num -= 1
     end
end
l
repeat(3) { puts "foo" }

=> foo
      foo
      foo


摘自https://zh.wikibooks.org/wiki/Ru ... D%E4%BB%A3%E5%99%A8(Iterator)




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