Project1

标题: 新手学RGSS3有一段代码看不明白,麻烦帮忙解读下。 [打印本页]

作者: miantouchi    时间: 2019-2-23 18:45
标题: 新手学RGSS3有一段代码看不明白,麻烦帮忙解读下。
本帖最后由 miantouchi 于 2019-2-23 18:52 编辑
  1. class RPG::Actor < RPG::BaseItem
  2.   def battler_name
  3.     return @battler_name unless @battler_name.nil?
  4.     if /@btname\[(.+?)\]/ =~ @note
  5.       return (@battler_name = $1.clone)
  6.     else
  7.       return (@battler_name = "#{@name}_#{@nickname}")
  8.     end
  9.   end
  10.   def battler_hue
  11.     return @battler_hue unless @battler_hue.nil?
  12.     if /@bthue\[([0-9]+?)\]/ =~ @note
  13.       return (@battler_hue = $1.to_i.abs)
  14.     else
  15.       return (@battler_hue = 0)
  16.     end
  17.   end
  18.   attr_writer :battler_name
  19.   attr_writer :battler_hue
  20. end
复制代码

正常的@+变量,是实例变量我知道,
if /@btname\[(.+?)\]/ =~ @note 这一行我就读不明白了\转义符号我也知道,但是 /斜杠是怎么回事,这里面的\[是啥意思,还有(.+?)是啥意思,看了几天ruby新手入门再看这个怎么也理解不来这块代码,麻烦帮忙解读下。
最好是通段解读
作者: 灯笼菜刀王    时间: 2019-2-23 19:04
这个是正则表达式, 它不算新手怪了.....

它的意思是获取备注里匹配的字符串

详细可以看这里 传送门
作者: MCCF    时间: 2019-2-23 20:21
这是正则表达式,新手学可能会比较难一点
/@btname\[(.+?)\]/,其中//中是正则表达式的内容。
这段我没理解错的话,是在@note包含"@btname[空白或任意非换行符\n的字符]"时返回true。具体看2楼的教程不错
作者: KB.Driver    时间: 2019-2-23 22:39
if /@btname\[(.+?)\]/ =~ @note
      return (@battler_name = $1.clone)

//两个斜杠之间的内容是正则表达式,=~是匹配,匹配结果可以用$&,$1,$2,...来查看
可以是字符串=~正则表达式也可以是正则表达式=~字符串(文中的这种)

@note就是数据库里的备注 是一个字符串
/@btname\[(.+?)\]/  就是如果字符串包含有”@byname[任意个换行符以外字符]”就匹配成功
同时将正则表达式中小括号部分(也就是任意个换行符以外字符)存入$1
后面就可以对匹配的部分进行处理





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