Project1

标题: [Main组的问题]关于 $! messgae sub filename 的问题 [打印本页]

作者: 九靈    时间: 2013-8-22 03:02
标题: [Main组的问题]关于 $! messgae sub filename 的问题
本帖最后由 九靈 于 2013-8-22 20:51 编辑

在Main组里

我知道 Errno::ENOENT 是用来捕捉找不到文件时的异常的

然后系统在找不到文件时会捕捉到Errno::ENOENT异常并执行

           filename = $!.message.sub("No such file or dirctory - ","")
           print("找不到文件 #{filename}。")

这段代码

---------------------------------------------------

接着有几个问题

(允许我一题多问吧)

(话说这能拆开来问吗...)

1.  为什么  知道所缺的文件的名字?

2. 为什么 filename  的值不是  "No such file or dirctory -  "

3.  RMXP 附带帮助里说的  "$!  最近发生的异常的信息。由 raise 设定。"  在这里是指  Errno::ENOENT  吗?  又  $! == Errno::ENOENT  ?

4.  RMXP 附带帮助里说  "message  返回描述错误信息的字符串。"  那在这里  "错误信息的字符串"  是指什么?

5.  话说RMXP 附带帮助里

          "sub(pattern) {|matched| ... }
          sub!(pattern) {|matched| ... }
          用 pattern 来替换首次匹配 pattern 的部分。
          sub 生成并返回替换后的字符串。而 sub! 会修改 self 本身并返回结果。若没有进行替换时返回 nil。
          除去只进行一次匹配这个特点以外,它与 gsub 是相同的。"

    有看没懂= ='

     估计  pattern  是指  "No such file or dirctory - ",""

    这样的话  "sub 生成并返回替换后的字符串。"

    filename  的值就会是  "No such file or dirctory - ",""  了?

    不过事实似乎是会  print  出  "找不到文件 + 缺失的文件名"



6.   "No such file or dirctory - ",""  的  最后  ""  有什么深层的意思?

--------------------------------------------





















作者: Algalon    时间: 2013-8-22 09:51
sub把message中的"No such file or dirctory - " 替换成 "", 其实就是把这句英文去掉了而已,主要是为了汉化,改成了中文 "找不到文件 " 了。 错误信息和缺失文件名在Errno模组的ENOENT 类中(这是一个Singleton类),赋值给全局变量$!, message方法输出错误语句"No such file or dirctory - Graphics/Titles/001-Title01"。 这里先将输出的语句赋值给变量filename, 然后由于是双引号的string,可以用#{filename}获取该变量。
作者: 九靈    时间: 2013-8-22 12:14
本帖最后由 九靈 于 2013-8-22 12:50 编辑

如果只是为了汉化的话
为什么不改成

          filename = $!.message.sub("No such file or dirctory - ", "找不到文件 ")
          print("#{filename}。")

这样是不是也行?





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