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

Project1

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

[已经解决] [def相关]关于return

[复制链接]

Lv1.梦旅人

梦石
0
星屑
49
在线时间
157 小时
注册时间
2013-8-14
帖子
203
跳转到指定楼层
1
发表于 2013-8-23 17:00:20 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
其实是小问题
Game_System中
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 获取窗口外观的文件名
  3.   #--------------------------------------------------------------------------
  4.   def windowskin_name
  5.     if @windowskin_name == nil
  6.       return $data_system.windowskin_name
  7.     else
  8.       return @windowskin_name
  9.     end
  10.   end

问题 :
那个 return 有必要写吗?
好像不写也不影响程序运行...

另外我知道return是结束方法
Scene_Title中
RUBY 代码复制
  1. class Scene_Title
  2.   #--------------------------------------------------------------------------
  3.   # ● 住处理
  4.   #--------------------------------------------------------------------------
  5.   def main
  6.     # 战斗测试的情况下
  7.     if $BTEST
  8.       battle_test
  9.       return
  10.     end

这个return 就有写的必要了


Lv1.梦旅人

梦石
0
星屑
49
在线时间
157 小时
注册时间
2013-8-14
帖子
203
8
 楼主| 发表于 2013-8-23 18:53:49 | 只看该作者
本帖最后由 九靈 于 2013-8-23 18:55 编辑
IamI 发表于 2013-8-23 18:22
return 会立即中止函数的执行,并将其参数作为此函数的返回值。
好吧,对于正常的语言来说,到此为止了。
...


在此先谢过。
看了回帖之后我自己做了一些尝试...
首先是return :
  1. class A
  2.   def af
  3.     @a = 8* 4
  4.     @b = 2* 3
  5.     return @a
  6.   end
  7. end
  8. $a = A.new
  9. print $a.af   #=> 32
  10. exit
复制代码
  1. class A
  2.   def af
  3.     @a = 8* 4
  4.     return @b
  5.     @b = 2* 3
  6.   end
  7. end
  8. $a = A.new
  9. print $a.af    #=> nil
  10. exit
复制代码
  1. class A
  2.   def af
  3.     @a = 8* 4
  4.     return
  5.     @b = 2* 3
  6.   end
  7. end
  8. $a = A.new
  9. print $a.af    #=> nil
  10. exit
复制代码
  1. class A
  2.   def af
  3.     @a = 8* 4
  4.     @b = 2* 3
  5.     return @c = @a * @b
  6.   end
  7. end
  8. $a = A.new
  9. print $a.af    #=> 192
  10. exit
复制代码
然后是去掉return :
  1. class A
  2.   def af
  3.     @a = 8* 4
  4.     @b = 2* 3
  5.   end
  6. end
  7. $a = A.new
  8. print $a.af    #=> 6
  9. exit
复制代码
  1. class A
  2.   def af
  3.     @a = 8* 4
  4.     @b = 2* 3
  5.     @c = @a
  6.   end
  7. end
  8. $a = A.new
  9. print $a.af    #=> 32
  10. exit
复制代码
以上
如此看来
  1. #--------------------------------------------------------------------------
  2.   # ● 获取窗口外观的文件名
  3.   #--------------------------------------------------------------------------
  4.   def windowskin_name
  5.     if @windowskin_name == nil
  6.       return $data_system.windowskin_name
  7.     else
  8.       return @windowskin_name
  9.     end
  10.   end
复制代码
的return 确实是可省的了

函数没有写出 return 语句时,将函数中,最后一个计算过的表达式的值,当作返回值返回。

算是学到了!




回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
52
在线时间
704 小时
注册时间
2011-12-27
帖子
941
7
发表于 2013-8-23 18:24:03 | 只看该作者
IamI 发表于 2013-8-23 18:22
return 会立即中止函数的执行,并将其参数作为此函数的返回值。
好吧,对于正常的语言来说,到此为止了。
...

原來是這樣=3=
可能我JAVA上腦了><

点评

正常语言都是这样的,我现在只见过『优雅』的Ruby有这么奇葩的机制  发表于 2013-8-23 18:26
回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3132
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

6
发表于 2013-8-23 18:22:28 | 只看该作者
return 会立即中止函数的执行,并将其参数作为此函数的返回值。
好吧,对于正常的语言来说,到此为止了。
但是Ruby作为一门奇葩脚本语言,自然有它的牛叉之处。
函数没有写出 return 语句时,将函数中,最后一个计算过的表达式的值,当作返回值返回。
正因为有这样的机制存在,才导致在这一特例中,return 关键词可以省略。

评分

参与人数 2星屑 +95 收起 理由
︶ㄣ牛排ぶ + 90 认可答案
satgo1546 + 5 ……

查看全部评分

菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
52
在线时间
704 小时
注册时间
2011-12-27
帖子
941
5
发表于 2013-8-23 18:14:30 | 只看该作者
本帖最后由 zeldafd 于 2013-8-23 18:21 编辑

錯了, 那個RETURN是有必要的.
RETURN其實是返回右邊的值並中結函數處理.

由註釋可以, 這個SYSTEM的函數是獲取文件名, 如果, @WINDOWSKIN_NAME定義了, 但沒返回到他的值, 那你用了這個函數就和沒用沒分別.

至於下面SCENE_TITLE的RETURN. 是用來中斷用, 並返回了一個空值(不是NIL / NULL), 因為功能不同, 寫法都會不一樣.

但可以肯定的是, 專業的人是不會寫出多餘的碼, 所以LZ不用擔心.

或者給一個碼你看一看, 可以給你明白多一點
  1. @a = 1
  2. def sth
  3.   if @a == nil
  4.     @a = 1
  5.     return @a
  6.   end
  7. end
复制代码
照LZ意思, 如果那個值早已定義, 而我卻沒有RETURN他出來, 這個函數是不會有任何的用途.
至於SCENE_TITLE中的那個反而可以不用寫, 因為你並不是處於一個分岐之中, 其實有用和沒用到是沒有任何關係的. 要是兩段碼反轉了才是正確的.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
帖子
1316
4
发表于 2013-8-23 18:04:58 | 只看该作者
return 就是结束函数处理的命令。函数可以考虑为 RPGXP 的公共事件,而 return 就是相当于「中断事件处理」的意思。return 右侧所写的运算,就是该函数的返回值。在中途中断函数的情况以外还可以省略 return,这大概会更方便吧。预置脚本中也是这样,大多数情况下都省略了 return 没写。

可以省略不写而已。

点评

谢谢!  发表于 2013-8-23 18:36

评分

参与人数 1星屑 +90 收起 理由
︶ㄣ牛排ぶ + 90 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
182 小时
注册时间
2011-2-17
帖子
518
3
发表于 2013-8-23 17:59:35 | 只看该作者
return木有必要。。= = 脚本会默认的
。。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

路人党员

梦石
0
星屑
52
在线时间
2276 小时
注册时间
2010-12-30
帖子
3225
2
发表于 2013-8-23 17:53:28 | 只看该作者
是没这个必要,但是return写了会让脚本更清晰。
本人擅长XP,如果有脚本或者Ruby方面的问题欢迎发电邮到[email protected]咨询,本人很少检查电邮所以不一定会及时回复,本人不会直接出手解决问题只会提供一个方向,所以谢绝伸手党
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 15:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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