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

Project1

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

[讨论] Ruby/RGSS Tips 每日一更 [技术区的版聊帖?]

  [复制链接]

Lv3.寻梦者

梦石
0
星屑
1050
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

跳转到指定楼层
发表于 2010-8-26 10:30:17 | 显示全部楼层 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x


这个是一个偶然的想法,需要一定的试点。是这样的,这个帖子每天将会更新一些Ruby 或者 RGSS 的小技巧,这些技巧一般很简短,易于掌握。

细则如下:
  • 每天只能有一个新回复,其他请使用“点评”功能,补充请使用“编辑”功能。否则版主有权删贴。
  • 和水区版聊帖一样,先抢先得。
  • 每个tips不宜超过200字
  • 每月根据情况施予不同的表彰
  • 精华内容将被搜集、整理。
  • 不要重复。或者过于简略而含糊不清。
  • 转载或引用请注明原文或引用链接(有些会员可能无法发送链接)。



注意!
  • 本帖采用的是[倒序看帖],新的帖子在最上方。
  • 其他的问题将在以后补充。





See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更

Lv1.梦旅人

旅之愚者

梦石
0
星屑
240
在线时间
812 小时
注册时间
2007-7-28
帖子
2148

贵宾

2
发表于 2010-9-27 02:20:57 | 显示全部楼层
本帖最后由 六祈 于 2010-9-27 18:28 编辑

继续每日一酱油~~~【这行依然不算字】

今日话题:你真的会用[]吗?
String#[]

国际惯例,先赋值一个模范变量
  1. str = "hello , world"
复制代码
[start,range]
  1. p str[0,5]
复制代码
这个会打印从索引0开始,取到的5个字符

[start..end]
  1. p str[0..4]
复制代码
这个会打印索引0到索引4【包含】的字符串

[String]
  1. p str["hell"]
复制代码
如果字符串能匹配hell的话会打印之

[integer]
  1. p str[0]
复制代码
这个会打印一个数字哟~要谨慎使用,如果想要打印索引0的字符,要使用
  1. p str[0].chr
复制代码
哟~

[Regexp]
  1. p str[/h.+?o/]
复制代码
会打印匹配正则的字符串部分,结果显示hello

点评

str[0]会返回整数的情况在ruby 1.9中得到了改善,现在可以用str[0]取得第0位的字符了  发表于 2010-9-29 16:31
p str[/h.+?o/]才会显示hello吧= =  发表于 2010-9-27 17:49
好高深啊  发表于 2010-9-27 11:57
值得注意的是在ruby中,默認情況,一個漢字占三個字節(utf8),而不是常見的兩個字節(GB2312)。一開始時老是搞錯咧Orz  发表于 2010-9-27 10:31
回复 支持 反对

使用道具 举报

Lv1.梦旅人

旅之愚者

梦石
0
星屑
240
在线时间
812 小时
注册时间
2007-7-28
帖子
2148

贵宾

1
发表于 2010-9-26 17:52:26 | 显示全部楼层
本帖最后由 六祈 于 2010-9-26 17:57 编辑

每日一酱油【这行不算字】

有关map的一个小技巧

【技术基础:实参前添加&可以隐式调用to_proc方法】
  1. class Symbol
  2. def to_proc
  3. proc {|obj , *args| obj.send(self , *args)}
  4. end
  5. end
复制代码
上面的代码定义了Symbol对象的to_proc方法
然后~赋值一个字符串数组
  1. words = %w(hello kitty not world)
复制代码
然后是重点:
  1. list = words.map(&:capitalize)
复制代码
ok,得到了第一个字母大写的字符串数组了

点评

优雅还是不错的  发表于 2010-9-29 16:32
moy
自己写的代码都很有可能忘记..何况别人写的...对于合作开发而言,越是优雅的代码越容易造成阅读和理解困难无误.  发表于 2010-9-27 16:31
代碼還是統一的好,為了某個功能而特別開辟一種寫法,對于二次開發很不利  发表于 2010-9-27 10:36
moy
代码越是优雅就代表着对于别人来说识别代价越高,以及返工时自己越是欲哭无泪...  发表于 2010-9-27 06:21
to【紫苏】and【小瞳】:数据量不大的话,效率应该不会差很多,然后代码会看起来清晰很多【其实愚者就是一个追求代码优雅的怪异存在】  发表于 2010-9-26 23:09
回复 支持 反对

使用道具 举报

Lv1.梦旅人

旅之愚者

梦石
0
星屑
240
在线时间
812 小时
注册时间
2007-7-28
帖子
2148

贵宾

发表于 2010-9-10 00:33:34 | 显示全部楼层
本帖最后由 六祈 于 2010-10-22 21:58 编辑

2010-9-10
咱也来抢一楼,今天聊聊参数的话题吧~

比如def method_a(arg1 , arg2 , ……);end
这样子是最普通的~
method_a有两个参数分别是arg1和arg2,这两个会作为局部变量被传入到方法内部,完成方法并返回后应该会由GC回收

默认参数,是指参数有默认值
形如def method_b(arg1 , arg2 = 3);end
这样调用方法时,如果仅仅传入一个实参,则arg2为默认的3【默认参数需要放在常规参数后面】

剩余参数,指将个数不明的参数作为一个数组的元素传入
形如def method_c(arg1 , *args);end
则使传入的参数中,第一个赋值给arg1,其余的成为一个数组args,以args[0]等方式调用

另外,在方法调用的参数里也可以使用*,那个是将数组展开作为参数,如下:
def method_c2(arg1,arg2,arg3);end;method_c2(*[1 , 2 , 3]);end

关键字参数,指在形参最后用一个哈希表作为关键词参数
例子:def method_d(arg1 , keys = {});end
           而在调用时,可以这样写method_d(1 , {:a => 1 , :b =>2})【哈希作为最后一个参数时,可以省略大括号,称为裸哈希】
           则在方法体内部,就可以用用keys[:a]和keys[:b]分别取得1和2的值

【另外剩余参数和关键词参数不可同时使用,理由自己想吧】


另外再提下块,块也可以是参数,比如数组的迭代方法each,如果自己写的话,如下:
  1. class Array
  2.   def each(&block)
  3.     for i in 0...self.length
  4.       block.call(self[i])
  5.     end
  6.   end
  7. end
复制代码
这里的&指将方法调用时的代码块赋值给block这个变量,然后在方法体内迭代

而在方法调用时,也可以使用&,但意义不同,使用方法如下:
pro = Proc.new{|a| puts a}
[*1..8].each(&pro)
即可完成相当于:
[1,2,3,4……,8].each do |i|
puts i
end
的功能
即在实参中对一个变量前加&可以隐式调用该变量的【to_proc】方法并将之传入方法的代码块参数

点评

回zh大人:zh大人你说的也是正确的。另外愚者说的是在传递实参时,前面加&就会隐式调用一次to_proc方法  发表于 2010-9-26 17:42
to_proc是这功能?不是把一个method或其他代码块转换成Proc的吗  发表于 2010-9-26 17:23
moy
前半部分理解无障碍...块..╮(╯_╰)╭..咱还是回去再翻翻F1好了...  发表于 2010-9-10 01:19
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-5 03:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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