楼主: david_ng223

[結帖]我開始學腳本啦~~求大神們指點~~

[复制链接]

百合控

梦石
0
星屑
6548
在线时间
1275 小时
注册时间
2013-8-21
回帖
3522

开拓者

发表于 2014-2-5 11:37:30 | 显示全部楼层
david_ng223 发表于 2014-2-4 18:34
a = 0 # 把0 代入变量a
i = 1 # 把1 代入变量i

复杂的形式不建议用后缀表达式
而且一般来说较多的语句最好写成块
但是如果一定要写的话:
[pre lang="ruby" line="1"]a = 0
i = 1
[a += i, i += 1] while i <= 5
p a[/pre]
如果想坑爹点
[pre lang="ruby" line="1"]a = 0
i = 1
a += i += 1 while i <= 4; a + 1
p a[/pre]
或者换个思路 不用while[pre lang="ruby" line="1"]a = 0
6.times{|i| a+=i}
p a[/pre]

点评

还不错,顶一个  发表于 2014-2-11 14:14
p (1..5).inject(:+)  发表于 2014-2-5 13:53
萌新瑟瑟发抖
看到我请叫我去干活
回复

使用道具 举报

david_ng223 该用户已被删除
 楼主| 发表于 2014-2-5 12:25:04 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

百合控

梦石
0
星屑
6548
在线时间
1275 小时
注册时间
2013-8-21
回帖
3522

开拓者

发表于 2014-2-5 12:28:42 | 显示全部楼层
david_ng223 发表于 2014-2-5 12:25
a = 0
    i = 1
    a += i += 1 while i

我少打了一个等于号
这样[pre lang="ruby" line="1"] a += i += 1 while i <= 4 ; a += 1[/pre]
事实上,用分号隔开的 就是两个语句
等价于[pre lang="ruby" line="1"] a += i += 1 while i <= 4
a += 1[/pre]
输出15
萌新瑟瑟发抖
看到我请叫我去干活
回复

使用道具 举报

david_ng223 该用户已被删除
 楼主| 发表于 2014-2-5 12:47:41 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

百合控

梦石
0
星屑
6548
在线时间
1275 小时
注册时间
2013-8-21
回帖
3522

开拓者

发表于 2014-2-5 12:51:30 | 显示全部楼层
david_ng223 发表于 2014-2-5 12:47
41樓的第1,2段代碼都明白了,
仍然不明白第3段的
6.times{|i| a+=i}

times是整数的方法
times {|n| ... }
依次迭代执行 self 次,从 0 至 self-1。若 self 为负数,则什么都不做。
返回 self。

[pre lang="ruby" line="1"]7.times{|i| p i}
#=>0 1 2 3 4 5 6[/pre]
until等价于 while not
[pre lang="ruby" line="1"]a  = 0
i = 1
[a += i, i += 1] until i > 5
p a[/pre]
和之前第一段是一样的

评分

参与人数 1星屑 +20 收起 理由
无脑之人 + 20 我去你这个回复速度太可怕了

查看全部评分

萌新瑟瑟发抖
看到我请叫我去干活
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2311
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-2-5 13:56:54 | 显示全部楼层
本帖最后由 taroxd 于 2014-2-5 14:06 编辑
david_ng223 发表于 2014-2-5 12:47
41樓的第1,2段代碼都明白了,
仍然不明白第3段的
6.times{|i| a+=i}


until 的例子
(选自RGSS3) update until scene_changing?
scene_changing? 是一个方法,如果场景变化就返回true
所以直到场景变化前,游戏场景会不断update,不断update

求和的话可以 p (1..5).inject(:+) 省事,省心~ while 神马的都是浮云

另外说一下,我没有被@到……

点评

我也没有被@到 不知道为什么他一直@不到我……  发表于 2014-2-5 16:44
回复

使用道具 举报

梦石
0
星屑
122
在线时间
552 小时
注册时间
2012-8-18
回帖
1392
发表于 2014-2-5 16:46:19 | 显示全部楼层
好神奇的版聊帖,过来围观学习等待扣分【大雾

点评

什么心态  发表于 2014-2-5 17:06
这个速度如何 够慢了吧  发表于 2014-2-5 17:05
什么心态  发表于 2014-2-5 16:46

评分

参与人数 2星屑 +67 收起 理由
taroxd + 1 论版聊不被扣分的正确方法
余烬之中 + 66

查看全部评分

我要填坑!我要背单词!我要学日语!我要每天锻炼!
好吧呵呵= =
回复

使用道具 举报

david_ng223 该用户已被删除
 楼主| 发表于 2014-2-5 17:42:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

百合控

梦石
0
星屑
6548
在线时间
1275 小时
注册时间
2013-8-21
回帖
3522

开拓者

发表于 2014-2-5 17:58:28 | 显示全部楼层
david_ng223 发表于 2014-2-5 17:42
引用12樓第8行
可是我在94頁的教程中找不到一個=~,
表示我只知道=,==,+=,-=,*=,/=,%=,**=,!=,=的用法

恩……
self === other
此方法多是是用于 case 判断句中。预设情况下与 Object#== 相同。在子类中进行归属检查时,可以根据情况重新定义。


[pre lang="ruby" line="1"]a = 0
puts "Instance variables a is a " +
case a
when :hello
  "symbol hello"
when "hi"
  "string hi"
when 1
  "Integer 1"
when 0
  "Integer 0"
else
  "Something else"
end
#=>Instance variables a is a Integer 0

#依次调用===比较a与case后面的元素
#如果true 执行子句[/pre]


有时候我们的比较更特殊
有一个类[pre lang="ruby" line="1"]class I_AM_A_CLASS
  attr_accessor :m, :n
end[/pre]如果有下列比较 返回值是false
[pre lang="ruby" line="1"]a = I_AM_A_CLASS.new

puts a == I_AM_A_CLASS.new
#=> false[/pre]于是我们这样[pre lang="ruby" line="1"]class I_AM_A_CLASS
  def ===(other)
    return false if self.class != other.class
    self.m === other.m && self.n  === other.n
  end
end[/pre]
有这个比较[pre lang="ruby" line="1"]a = I_AM_A_CLASS.new

puts a == I_AM_A_CLASS.new
#=> false

puts a === I_AM_A_CLASS.new
#=> true[/pre]
萌新瑟瑟发抖
看到我请叫我去干活
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2311
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-2-5 18:14:37 | 显示全部楼层
本帖最后由 taroxd 于 2014-2-5 18:29 编辑

首先参见34楼,有对case的简单介绍
case中用的是 === 来判定相等

[pre lang="ruby" line="1"]
def balabala(something)
  case something
  when 'string' then puts 'something is "string"'
  when /string/ then puts 'something is a string that includes "string"'
  when String then puts 'something is a string'
  else puts 'something is not a string'
  end
end

balabala('string')
balabala('i am a string')
balabala('balabala')
balabala(/string/)
balabala(String)
[/pre]

输出结果:
something is "string"
something is a string that includes "string"
something is a string
something is not a string
something is not a string

这说明,
regexp === string 的结果是匹配是否成功。
class === instance 的结果是 instance 是否是 class 或其子类的实例。
这两者都与原来的 == 意义无关了

当然 === 不一定要用在case语句里,你也可以拿出来单独用,比如17L代码第三行的注释里面

点评

→ → 我木有教程…………  发表于 2014-2-7 09:14
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部