Project1

标题: [def相关]关于return [打印本页]

作者: 九靈    时间: 2013-8-23 17:00
标题: [def相关]关于return
其实是小问题
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 就有写的必要了



作者: 英顺的马甲    时间: 2013-8-23 17:53
是没这个必要,但是return写了会让脚本更清晰。
作者: 小和尚    时间: 2013-8-23 17:59
return木有必要。。= = 脚本会默认的
。。
作者: 恐惧剑刃    时间: 2013-8-23 18:04
return 就是结束函数处理的命令。函数可以考虑为 RPGXP 的公共事件,而 return 就是相当于「中断事件处理」的意思。return 右侧所写的运算,就是该函数的返回值。在中途中断函数的情况以外还可以省略 return,这大概会更方便吧。预置脚本中也是这样,大多数情况下都省略了 return 没写。

可以省略不写而已。
作者: zeldafd    时间: 2013-8-23 18:14
本帖最后由 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中的那個反而可以不用寫, 因為你並不是處於一個分岐之中, 其實有用和沒用到是沒有任何關係的. 要是兩段碼反轉了才是正確的.
作者: IamI    时间: 2013-8-23 18:22
return 会立即中止函数的执行,并将其参数作为此函数的返回值。
好吧,对于正常的语言来说,到此为止了。
但是Ruby作为一门奇葩脚本语言,自然有它的牛叉之处。
函数没有写出 return 语句时,将函数中,最后一个计算过的表达式的值,当作返回值返回。
正因为有这样的机制存在,才导致在这一特例中,return 关键词可以省略。
作者: zeldafd    时间: 2013-8-23 18:24
IamI 发表于 2013-8-23 18:22
return 会立即中止函数的执行,并将其参数作为此函数的返回值。
好吧,对于正常的语言来说,到此为止了。
...

原來是這樣=3=
可能我JAVA上腦了><
作者: 九靈    时间: 2013-8-23 18:53
本帖最后由 九靈 于 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 语句时,将函数中,最后一个计算过的表达式的值,当作返回值返回。

算是学到了!









欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1