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

Project1

 找回密码
 注册会员
搜索
查看: 1786|回复: 6
打印 上一主题 下一主题

[已经解决] 这里的return去掉和不去掉有什么不同

[复制链接]

Lv1.梦旅人

梦石
0
星屑
75
在线时间
138 小时
注册时间
2012-7-26
帖子
149
跳转到指定楼层
1
发表于 2012-11-18 15:43:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
@沙漠点灰

  1. def dice
  2.   return rand(6) + 1
  3. end

  4. p dice
复制代码
把这里的return去掉以后有什么不同,好像我试的没啥不同,请问是怎么回事?
有人让我不要省略return,F1帮助说可以省略,那到底什么时候可以省,什么时候不能省?

Lv4.逐梦者

「Pemercyia」


Urhurrenna

梦石
0
星屑
9443
在线时间
2751 小时
注册时间
2008-9-5
帖子
3544

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

2
发表于 2012-11-18 17:54:57 | 只看该作者
在RGSS 1里哀家没这样试过~
RGSS 2没学过~直接跳过~
RGSS 3里哀家觉得这里去掉和不去掉效果没区别~
不过考虑到有时候有奇怪的现象的话还是加上吧~
意义就是“返回某值”
你也可以填上其他变量~
去掉的话这个函数的意义应该就是直接取某个变量或常量吧~
需要运算的话最后一行写上要取的变量应该可以取到的吧?
于是还是建议加上去…………

return后面不跟内容的话~
理解为“返回”
就像这样:
  1. def update
  2.   if @xxx_window.active
  3.     update_xxxx(这一行是指某个函数)
  4.     return
  5.   end
  6.   @aaa.update
  7.   @bbb.update
  8. end
复制代码
这样的话~
只要@xxx_window是活动的~
那么就执行那个名为:update_xxxx
的函数~然后返回无视update里面之后的内容~
反之,则update_xxxx不会执行~照惯例一直执行下去~

应该这里的return不能去掉~
否则会照惯例执行接下去的内容造成某些奇怪的现象~(当然,需要特定效果的情况除外~)
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
270 小时
注册时间
2010-2-4
帖子
1305
3
发表于 2012-11-19 10:09:53 | 只看该作者
- -b其实,ruby里写不写都一样,不过习惯而言需要用到函数返回值都会加个return,而没有的则不加,只是看着更清晰而已,实际效果的话是完全一样的...
好歹当年也当过大魔王过,orz
回复

使用道具 举报

Lv1.梦旅人

梦石
1
星屑
870
在线时间
42 小时
注册时间
2009-5-15
帖子
4
4
发表于 2012-11-19 10:12:27 | 只看该作者
ruby学的很浅,简单说下自己的看法。
ruby中方法的返回值默认是最后的表达式的值,并不要求非空函数必须返回相应的返回值,所以通常可以省略。
举个简单的例子来理解。
  1.   def dice
  2.     sum = 0
  3.   end
  4.   
  5.   p dice
复制代码
打印出0,无误,加入return同样的结果。
  1.   def dice
  2.     sum = 0
  3.     temp =1
  4.   end
  5.   
  6.   p dice
复制代码
打印出1,按照代码顺序,temp = 1是最后的表达式,打印出的是temp的值,同样无误。
  1.   def dice
  2.     return sum = 0
  3.     temp =1
  4.   end
  5.   
  6.   p dice
复制代码
sum前添加return,打印出sum的值0,此时return下面的语句是不被执行的,sum = 0是最后的表达式,返回0。

但是如果声明一个累加的方法
  1.   def dice
  2.     sum = 0
  3.     for i in 0...6
  4.       sum += i
  5.     end
  6.   end
  7.   
  8.   p dice
复制代码
显然我们想要的是0~5累加所得的值,但打印出的完全不是我们想要的值。
这时候两种处理方式,for循环之后添加return sum,或者直接写sum。
  1.   def dice
  2.     sum = 0
  3.     for i in 0...6
  4.       sum += i
  5.     end
  6.     return sum
  7.   end
  8.   
  9.   p dice
复制代码
  1.   def dice
  2.     sum = 0
  3.     for i in 0...6
  4.       sum += i
  5.     end
  6.     sum
  7.   end
  8.   
  9.   p dice
复制代码
只要记住“返回值默认是最后的表达式的值”这句话,就是保证代码运行到最后的表达式结果是一个我们所需的值,那么其实return很多时候是可以省略的。
比如例子3中让dice返回0也可以用不加return的方法。
  1.   def dice
  2.     if true
  3.       sum = 0
  4.     else
  5.       temp = 1
  6.     end
  7.   end
  8.   
  9.   p dice
复制代码
条件语句让最后的表达式temp = 1不被执行,所以sum = 0视为最后的表达式,dice的返回值也就是我们想要的0,省略了return。
return常用来做打断,一个做遇敌处理的方法,它是一个事件处理我们不需要具体的返回值。遇敌会有许多条件限制,比如地图是否为安全区敌人队伍是否为空等等,我们会用到return if加上条件这样的语句,打断事件处理并返回一个空值,视为不执行遇敌。当然也可以用条件嵌套来把事件框起来,或者多个并条件,这样也可以不用return来阻止事件处理,但是代码的美观性就不怎么样了。

纯粹个人摸索,如有勘误希望指正。

评分

参与人数 1梦石 +1 收起 理由
hcm + 1 认可答案

查看全部评分

回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
帖子
666
5
发表于 2012-11-19 19:16:16 | 只看该作者
"Ruby参考手册"中提到:
一个Ruby程序员习惯在最后一行省略return
>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
138 小时
注册时间
2012-7-26
帖子
149
6
 楼主| 发表于 2012-11-21 12:34:20 | 只看该作者
wyverntovah 发表于 2012-11-19 10:12
ruby学的很浅,简单说下自己的看法。
ruby中方法的返回值默认是最后的表达式的值,并不要求非空函数必须返 ...

能说两个变量是,只有一个加了return才被显示么,不加的不算么?
回复

使用道具 举报

Lv1.梦旅人

梦石
1
星屑
870
在线时间
42 小时
注册时间
2009-5-15
帖子
4
7
发表于 2012-11-21 13:02:51 | 只看该作者
825300455 发表于 2012-11-21 12:34
能说两个变量是,只有一个加了return才被显示么,不加的不算么?

不能说不算,得把return理解为句尾。
假设变量1变量2,如果在变量1前加return,那么变量2可以说是“不算”,因为它没有执行。
如果在变量2前加return,变量1不可以说是“不算”,因为它执行了,但我们所得的取值是变量2的而不是变量1.
好比AB两个人对话。
A问:1+2等于多少?
B答:天气不错。我吃过饭了。等于3.
B答了三句话,A只需要的信息是第三句,但不能说前面两句B没有说过。
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-10 16:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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