Project1
标题:
新手学RGSS3有一段代码看不明白,麻烦帮忙解读下。
[打印本页]
作者:
miantouchi
时间:
2019-2-23 18:45
标题:
新手学RGSS3有一段代码看不明白,麻烦帮忙解读下。
本帖最后由 miantouchi 于 2019-2-23 18:52 编辑
class RPG::Actor < RPG::BaseItem
def battler_name
return @battler_name unless @battler_name.nil?
if /@btname\[(.+?)\]/ =~ @note
return (@battler_name = $1.clone)
else
return (@battler_name = "#{@name}_#{@nickname}")
end
end
def battler_hue
return @battler_hue unless @battler_hue.nil?
if /@bthue\[([0-9]+?)\]/ =~ @note
return (@battler_hue = $1.to_i.abs)
else
return (@battler_hue = 0)
end
end
attr_writer :battler_name
attr_writer :battler_hue
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