设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: harinlen
打印 上一主题 下一主题

[版务] 【活动】【VA】RGSS 3 入门教程大家写(更新13/02/15)

  [复制链接]

Lv2.观梦者

虚構歪曲

梦石
0
星屑
309
在线时间
1194 小时
注册时间
2010-12-18
帖子
3928

贵宾

1
发表于 2013-2-13 20:35:00 | 显示全部楼层
本帖最后由 忧雪の伤 于 2013-2-13 20:53 编辑

UI> 我沒時間全部看完所以隨便指出一點應該是錯誤的地方。
Ruby 的常量指的是以大寫字母開始的標識符。而不是整數之流。
常量是可以賦值的。例如 Foo = 0 。
Fixnum、Symbol 和 nil/true/false 的名稱是「立即值」。
而且,在if语句中,“==true”是可以省略的

這顯然是錯的。if 只不過是右邊不為 nil/false 。
用一個例子來說明就是。
  1. foo = 0
  2. msgbox true if foo == true
复制代码
大括号内的东西是个变量,按照变量输出。

這顯然是錯的。大括號不過是把其中的值 to_s 。這不一定是變量。
Foo = 0
msgbox "#{Foo}"
msgbox "#{0}"
告诉RGSS3这货是个数组而不是变量

數組和變量完全沒有直接關係。數組是對象。變量是標識符。
这里用了def self.add_one_cloud来定义方法——self.是必须的,否则会导致各种奇怪的事情发生= =

實例方法和特殊方法的差別……可以參考這個帖子上文中函數的部份。

评分

参与人数 3星屑 +57 梦石 +1 收起 理由
Mic_洛洛 + 1 更新奖励!!
harinlen + 45 香火钱
任F + 12 尾随卖个萌(#--)/ .

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
309
在线时间
1194 小时
注册时间
2010-12-18
帖子
3928

贵宾

2
发表于 2013-2-14 11:18:15 | 显示全部楼层
本帖最后由 忧雪の伤 于 2013-2-17 12:23 编辑

塊 - Block

前言
Ruby 中被 { } 括起來的就是塊 —— 這當然不包括 Hash
也許你會感到陌生,但實際上塊廣泛出現在你的視野,以一種隱性的形式。
這指的是 for .. in
實際上這個控制結構就是調用了 each 方法。
用一個例子來說明就是。
  1. for i in Object.new
  2. end
复制代码
會報 NoMethodError
那麼什麽是 each 方法呢。它涉及到 Ruby 中迭代的觀念。實際上迭代就是調用帶塊的方法。
那麼什麽是塊呢。它是一個代碼段。注意它並不會直接處理。而是要你提醒程序去處理塊。
上文的 for .. in,對於一個數組來說,實際上可以看做 [].each {|i| }
處理時會用這個數組的每一個元素傳遞到 i 中,並且處理所帶塊中的代碼段。
例如。
  1. [0, 1, 2].each {|i| msgbox i }
复制代码
在一般情況下,這可以和 for .. in 互換,雖然它們是有差別的,但我不會在這裡提到。
那麼我們將如何使用塊呢?
過程對象 - Proc
我們並不能直接獲取到 Block 。這裡介紹把 Block 對象化的 Proc 。這就可以直接獲取到一個 Block 了。
生成一個 Proc 有兩種方法。
一個是內部函數 proc 。用法就是。
  1. block = proc { msgbox "hi~" }
复制代码
這個方法會把所帶塊對象化并返回對應的對象。
一個是 Proc.new 。依然是 block = Proc.new {},不談。
那麼如何處理這個 Block 呢?Proc 也給出了兩種方法。
一個是 Proc#call(arg1, arg2, ...) (# 表示一個類的實例方法)
一個是 Proc#[arg1, arg2, ...] ,這個是爲了保持和方法的某種形式上的一致,不談。
於是有一個問題。爲什麽會有 arg,也就是參數呢。
實際上塊是可以帶參數的,這在 each 里就能看出來。它是用「||」包含。沒有數量上的限制。
怎麼用?例如。
  1. block = proc {|a, b, c| msgbox a + b + c }
  2. block.call 1, 2, 3
复制代码
似乎和方法有異曲同工之妙~它們的區別在於方法有被調對象而塊沒有,你可以當做無名函數使用。
那麼如何在方法中調用塊?也就是迭代?
調用塊的方法 - 迭代
這裡將會介紹 yield、以及直接用參數表示。
首先需要說明的是,直接讓一個方法帶塊並不會出現異常。
例如。
  1. def foo
  2. end
  3. foo {}
复制代码
那麼我們要如何調用呢。
  1. def foo &block
  2.   block.call
  3. end
  4. foo { p "w" }
复制代码
& 作為前綴的參數會接受方法所帶的塊的對象化對象也就是 Proc
此外也可以。
  1. def foo
  2.   yield 0, 1
  3. end
  4. foo {|a, b| p a, b }
复制代码
這裡也直接把如何用 yield 時也用塊的參數說明了。
結言
Block 用於打家劫舍。這是一個老梗。說明 Block 是多麼有趣。實際使用還得你自己來發掘。(我在另外一文中提到了可以用於傳遞事件變量。)那麼就沒了哦。也許你可能會看的一頭霧水。但這也很正常。這完全是脫離了 RGSS 的講學。這實際上並不怎麼符合學習者的需求。所以如果看的不大明白的話可以等以後再來看的。
(說來其實 do ... end 也行嘛。我就在這裡不提了。)

评分

参与人数 2星屑 +100 梦石 +1 收起 理由
Mic_洛洛 + 55 + 1 更新奖励!!
harinlen + 45

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
309
在线时间
1194 小时
注册时间
2010-12-18
帖子
3928

贵宾

3
发表于 2013-2-15 11:40:05 | 显示全部楼层
本帖最后由 忧雪の伤 于 2013-2-15 11:50 编辑

@司马睿风
如果在你P的内容中包含一个变量,那么在" "号中,P的结果会返回你的变量的数值,而' '号则返回p的具体的字符内容。

UI> Ruby 1.9.3 實測結果無效。不知道是不是版本問題。(實際上你這種說法我聞所未聞。
p crr.2

UI> 請問 .2 什麽高級語法?
不需要重新来个 integer。

UI> 為啥是 integer ……
我这里存入了数字,英文,字符串等类型(当然,ruby中是不需要定义数据类型的,随意存储)。

UI> 英文也是數據類型!(233)還有您的數組的字符串都沒加引號哦。
@satgo1546
UI> 關於模塊那裡的,自己看代碼。
  1. class Foo
  2.   def self.foo
  3.   end
  4. end
  5. Foo.foo
复制代码

点评

又见神一样的def= =  发表于 2013-2-15 23:38

评分

参与人数 2星屑 +45 梦石 +1 收起 理由
harinlen + 45 精品文章
Mic_洛洛 + 1 感谢抓虫!

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
309
在线时间
1194 小时
注册时间
2010-12-18
帖子
3928

贵宾

4
发表于 2013-2-17 15:57:57 | 显示全部楼层
本帖最后由 忧雪の伤 于 2013-2-17 16:02 编辑


常量、變量補充

- 常量部份 -

常量不能在方法中定義。但實際上在前者以外的情況可以再賦值,如果使用 irb 的話你會看到 warning
常量也有自己的作用域。這和全局變量不同。
例如。
  1. Foo = Class.new
  2. msgbox Foo
  3. class Foo
  4.   Bar = 0
  5. end
  6. p Bar # => NameError
复制代码
常量的作用域是以當前作用域作為起始,一直適用所有往下的作用域。
若想在外部访问类或模块中的常数时,要使用「::」操作符。
例如。
  1. class Foo
  2.   Bar = 0
  3. end
  4. msgbox Foo::Bar
复制代码
實際上這也可以直接賦值一個類裏的常量。
  1. Foo = Class.new
  2. Foo::Bar = 0
  3. msgbox Foo::Bar
复制代码

- 變量部份 -

實例方法中定義的實例變量只在那個類的實例適用。而且每個實例的實例變量不會互相影響。不要天真的以為它們是共享的。
  1. class Foo
  2.   def foo
  3.     @foo = 0
  4.   end
  5. end
  6. Foo.new.foo
  7. msgbox Foo.instance_variable_get :@foo # => nil
复制代码
從另外一個角度來看就是。
  1. class Foo
  2.   @foo = 0
  3.   def foo
  4.     msgbox @foo
  5.   end
  6. end
  7. Foo.new.foo # => nil
复制代码
在這裡順便介紹兩個在外部操作對象的實例變量的方法。
- Object#instance_variable_get(name)  
引用實例變量。
name 就是實例變量的名字,可以為 Symbol 或者 String,例如 :@foo 。(注意別忘記 @
- Object#set_instance_variable(name, value)  
定義實例變量。
name 同上。value 就是值。
Ruby 方便我們讀寫實例中的實例變量,為我們提供了 attr 系列方法。這在 F1 中有提到,所以就不列出來了。
實際上我們可以用上面給出的兩種方法試著復原同樣的效果。自己去試試吧~

评分

参与人数 1星屑 +100 梦石 +1 收起 理由
Mic_洛洛 + 100 + 1 更新奖励!

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-16 20:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表