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

Project1

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

[已经解决] VA系统文言文式脚本求注解(1)。

[复制链接]

Lv1.梦旅人

梦石
0
星屑
164
在线时间
415 小时
注册时间
2020-1-11
帖子
256
跳转到指定楼层
1
发表于 2020-4-16 11:02:26 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
#==============================================================================
# ■ Game_BattlerBase
#------------------------------------------------------------------------------
#  管理战斗者的类。主要含有能力值计算的方法。Game_Battler 类的父类。
#==============================================================================

class Game_BattlerBase

……
#--------------------------------------------------------------------------
  # ● 清除能力的增加值
  #--------------------------------------------------------------------------
  def clear_param_plus
    @param_plus = [0] * 8
  end
……
我的理解是,@param_plus = [0] * 8  ==> @param_plus = {[0],[0],[0],[0],[0],[0],[0],[0]}
或是
@param_plus = {param_plus(0)=[],
                         param_plus(1)=[],
                        param_plus(2)=[],
                         param_plus(3)=[],
                         param_plus(4)=[],
                         param_plus(5)=[],
                         param_plus(6)=[],
                         param_plus(7)=[]}
那一种理解是正确的?还是另有答案。

Lv3.寻梦者

梦石
0
星屑
4216
在线时间
619 小时
注册时间
2013-4-30
帖子
124
14
发表于 2020-4-16 21:15:14 | 只看该作者
看到标题还以为有人实现了VA里的wenyan-lang

ruby中的array -> python中的list
ruby中的hash -> python中的dict

也许可以这么理解?

点评

说起来可能也是因为Ruby里所有的对象都是hashable的……其实本质上区别不大吧  发表于 2020-4-17 12:22
原来是这样,感谢 @guoxiaomi 指正  发表于 2020-4-17 07:28
python里dict的key不能是unhashable的值,ruby里就没有这个限制,尽管也不推荐用奇奇怪怪的东西做key就是了……  发表于 2020-4-17 00:06
    
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39540
在线时间
1919 小时
注册时间
2010-11-14
帖子
3319

R考场第七期纪念奖

13
发表于 2020-4-16 20:45:21 | 只看该作者
11楼说的对,楼主先分清楚块与哈希字面量的区别。
块必定是接在方法的后面,因为块的作用实际上是作为方法调用的参数。
而哈希字面量生成的是一个哈希对象。

再说块与哈希字面量的语法完全不一样啊。
块的语法:
无参数 { expression }
带参数 {|args| expression }

哈希字面量:
{}
{ key1 => value1, key2 => value2 }
{ sym1: value1, sym2: value2 }

最后,楼主产生这种疑惑的根本原因是ruby支持运算符重载。
而ruby核心库就实现了一些运算符,这些运算符操作的结果都应当作为特例记忆。
有时间的话自己翻翻核心库手册看看这些方法。(更快的方法是实际运行一遍)
"string" * 3  # String :*
"a" << 98 # String :<<
[0] * 8 # Array :*
[1, 2, 2] - [2] # Array :-
[1] << 2 # Array :<<
用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
164
在线时间
415 小时
注册时间
2020-1-11
帖子
256
12
 楼主| 发表于 2020-4-16 14:42:17 | 只看该作者
MCCF 发表于 2020-4-16 14:11
文章所有代码都未经测试,有爱自取
数组存哈希是可以的,但是{}只是RGSS特有的Hash简写。它一般来说是表示 ...

这下概念就容易理解多了。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
2
星屑
6680
在线时间
501 小时
注册时间
2018-3-23
帖子
533

R考场第七期银奖

11
发表于 2020-4-16 14:11:01 | 只看该作者
本帖最后由 MCCF 于 2020-4-16 14:15 编辑

文章所有代码都未经测试,有爱自取
数组存哈希是可以的,但是{}只是RGSS特有的Hash简写。它一般来说是表示一个Block(块)。如:
  1. Array.new(size) {|index| ... }
复制代码
这是F1文档中的标准语法。可以把Block理解为类似于函数的东西:index为参数,...是执行的内容。不同的是{}语法的Block不能使用return,而会取块中最后一个结果作为返回值。
回到Array本身,这个语法的意思是,创建一个有size个元素的数组,每创建一个元素就调用块(传入当前元素的下标作为参数,从0开始计数)。并用返回值作为这个位置上的值。
如下实例:
  1. Array.new(10) {|index| index + 1 } # => [1,2,3,4,5,6,7,8,9,10]
复制代码
至于Array.new(size) { value }这个语法就更容易产生误解……不过这也是块的思想,value实际上是这个块的返回值,比如:
  1. Array.new(10) { 1 } # => [1,1,1,1,1,1,1,1,1,1]
复制代码
想要[{},{},{},{},{}]这样的东西?看看这个:
  1. Array.new(5){{}}
复制代码
顺便……如果想要防止歧义,可以用do-end块。这种语法是可以用return的,不过也可以不用。
  1. Array.new(10) do |index|
  2.   index * 2
  3. end
复制代码
结果为:[0,2,4,6,8,10,12,14,16,18]
祝好。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
164
在线时间
415 小时
注册时间
2020-1-11
帖子
256
10
 楼主| 发表于 2020-4-16 12:43:36 | 只看该作者
alianlord 发表于 2020-4-16 12:15
@buffs = Array.new(8) { 0 } 这个……
再讨教一下。是否是。@buffs =[{ 0 },{ 0 },{ 0 },{ 0 },{ 0 },{ ...

原来我一直被表象迷惑了。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
164
在线时间
415 小时
注册时间
2020-1-11
帖子
256
9
 楼主| 发表于 2020-4-16 12:28:32 | 只看该作者
alianlord 发表于 2020-4-16 12:15
@buffs = Array.new(8) { 0 } 这个……
再讨教一下。是否是。@buffs =[{ 0 },{ 0 },{ 0 },{ 0 },{ 0 },{ ...

@buffs =[{  },{  },{  },{  },{  },{  },{  },{  }]
我翻书的推测,{}中应该不是0,而是8个空的哈希{}。

点评

啊啊啊啊啊啊啊千万不能这么理解 哈希是哈希 数组是数组 虽说也可以这么写 但是这个方法就是生成几位数组并且用{}里的数值代替所有元素的方法   发表于 2020-4-16 12:45
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
164
在线时间
415 小时
注册时间
2020-1-11
帖子
256
8
 楼主| 发表于 2020-4-16 12:15:57 | 只看该作者
alianlord 发表于 2020-4-16 12:04
原来如此。谢谢。

@buffs = Array.new(8) { 0 } 这个……
再讨教一下。是否是。@buffs =[{ 0 },{ 0 },{ 0 },{ 0 },{ 0 },{ 0 },{ 0 },{ 0 }]

点评

最后得出[0,0,0,0,0,0,0,0] [{ 0 },{ 0 },{ 0 },{ 0 },{ 0 },{ 0 },{ 0 },{ 0 }] 这样理解是不对的 数组一般来说与{}号无关的说  发表于 2020-4-16 12:30
看了一下手册 Array.new(8)是指创建一个数量为8的nil数组也就是[nil,nil,nil,nil,nil,nil,nil,nil] {0}是指将这个数组所有元素通通取代为{ }里面的数值 最后得出   发表于 2020-4-16 12:27
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
164
在线时间
415 小时
注册时间
2020-1-11
帖子
256
7
 楼主| 发表于 2020-4-16 12:04:04 | 只看该作者
alianlord 发表于 2020-4-16 11:46
以你举的例子,@param_plus = [0] * 8 ==> [0,0,0,0,0,0,0,0]
但你试验的结果是。{ [0,0,0,0,0,0,0,0],[0 ...

原来如此。谢谢。

点评

还有[0,0,0,0,0,0,0,0]是属于数组的说 {}号有点不好解释 反正数组千万不能 {[0],[0],[0],[0],[0],[0],[0],[0]}这样理解  发表于 2020-4-16 12:08
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
164
在线时间
415 小时
注册时间
2020-1-11
帖子
256
6
 楼主| 发表于 2020-4-16 11:46:57 | 只看该作者
Cupidk爱呗茶 发表于 2020-4-16 11:32
想了一下感觉刚才的解释确实有点模糊了 大概是这样的【

[2,3,4] * 2 → [2,3,4,2,3,4] ...

以你举的例子,@param_plus = [0] * 8 ==> [0,0,0,0,0,0,0,0]
但你试验的结果是。{ [0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0]}
对不上?

点评

正确的结果其实是只有一行啦 [0,0,0,0,0,0,0,0] 出现8行结果是因为操作问题【抱歉引起了LZ误解  发表于 2020-4-16 12:02
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-6-23 01:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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