找回密码
 点一下
查看: 2142|回复: 13

关于:GameCache 的问题。。。

[复制链接]
发表于 2008-3-22 11:23:39 | 显示全部楼层 |阅读模式
  1. function H2I takes handle h returns integer
  2. return h
  3. return 0
  4. endfunction
  5. function I2U takes integer i returns unit
  6. return i
  7. return null
  8. endfunction
  9. function cache2 takes nothing returns nothing
  10. local unit ua = I2U(GetStoredInteger(udg_GC, I2S(H2I(ua)), "hero"))
  11. local unit ub = I2U(GetStoredInteger(udg_GC, I2S(H2I(ua)), "target"))
  12. local integer i = GetStoredInteger(udg_GC, I2S(H2I(ua)), "target")
  13. endfunction
  14. function cache1 takes unit ua,unit ub,integer i returns nothing
  15. call StoreInteger(udg_GC, I2S(H2I(ua)), "hero", H2I(ua))
  16. call StoreInteger(udg_GC, I2S(H2I(ua)), "target", H2I(ub))
  17. call StoreInteger(udg_GC, I2S(H2I(ua)), "lv", i)
  18. endfunction
复制代码



为什么,我在 JassCraft 里检查语法的时候是没出错的!,但为是复制到 WE里!然后保存或者测试游戏,为什么 他会弹错 说 “cache2”里的 是错误名字!!
 楼主| 发表于 2008-3-22 12:06:04 | 显示全部楼层
555555555555高手门都不在的吗?
回复

使用道具 举报

发表于 2008-3-22 13:49:25 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2008-3-22 18:47:07 | 显示全部楼层
局部变量不能与传递的参数同名的吧………………

local unit ua = I2U(GetStoredInteger(udg_GC, I2S(H2I(ua)), "hero"))
这句话的确有问题,请lz解释一下到底要从哪里读取单位吧
回复

使用道具 举报

发表于 2008-3-22 21:34:29 | 显示全部楼层
可以想象为传递的参数其实是函数预先定义好的变量,而传参只是把值敷给它,然后让函数执行


意思就是变量重名了.
回复

使用道具 举报

发表于 2008-3-22 21:35:43 | 显示全部楼层
全局与局部变量相同叫覆盖,是允许的

局部与局部变量相同叫重复定义,不是允许的
回复

使用道具 举报

发表于 2008-3-22 21:37:40 | 显示全部楼层
function cache2 takes nothing returns nothing
local unit ua = I2U(GetStoredInteger(udg_GC, I2S(H2I(ua)), "hero"))
local unit ub = I2U(GetStoredInteger(udg_GC, I2S(H2I(ua)), "target"))
local integer i = GetStoredInteger(udg_GC, I2S(H2I(ua)), "target")
endfunction

此处 ua 未声明先使用。
一般来说, 变量赋值是按从右到左的顺序,也就是说。要运算右边,然后把值赋给左边的变量。
所以, 这句话在PJass里没有问题,但在WE中却出现了错误,原因就是因为你所使用的赋值语法的错误。
回复

使用道具 举报

 楼主| 发表于 2008-3-24 15:12:47 | 显示全部楼层
哦,谢谢个位。。由于这2天 没时间上!!所以 现在才来 感谢 个位朋友!
回复

使用道具 举报

 楼主| 发表于 2008-3-24 15:46:27 | 显示全部楼层
所以, 这句话在PJass里没有问题,但在WE中却出现了错误,原因就是因为你所使用的赋值语法的错误。
回复

使用道具 举报

 楼主| 发表于 2008-3-24 15:46:40 | 显示全部楼层
引用第8楼可靠树于2008-03-24 15:46发表的  :
所以, 这句话在PJass里没有问题,但在WE中却出现了错误,原因就是因为你所使用的赋值语法的错误。
那应该怎么写???????
回复

使用道具 举报

发表于 2008-3-24 17:12:22 | 显示全部楼层
local unit ua1111111111111 = I2U(GetStoredInteger(udg_GC, I2S(H2I(ub)), "hero"))
local unit ub 2222222222222= I2U(GetStoredInteger(udg_GC, I2S(H2I(ua)), "target"))
local integer i = GetStoredInteger(udg_GC, I2S(H2I(ua)), "target")


这还错那我就。。。。。。。。。。。。。。。。。
回复

使用道具 举报

发表于 2008-3-24 18:14:34 | 显示全部楼层
如果按这样写,不错才怪。ub 或者 ua 在使用之前,一定是存在的量。 按照赋值规则,从右到左,肯定先运行右边。 但右边的ua 或 ub 从何而来,难道是你创造出来的?何况你也只是在使用他们之后才用 local 声明他们是存在的。这个低级错误相信你能理解的。 如何事先让 ua 或 ub 存在, 参数是个好办法。
回复

使用道具 举报

发表于 2008-3-24 19:30:17 | 显示全部楼层
[codes=jass]function cache2 takes unit ua,unit ub returns nothing
local unit ua1111111111111 = I2U(GetStoredInteger(udg_GC, I2S(H2I(ub)), "hero")
local unit ub2222222222222= I2U(GetStoredInteger(udg_GC, I2S(H2I(ua)), "target")
local integer i = GetStoredInteger(udg_GC, I2S(H2I(ua)), "target")
end function[/codes]

我错了,少写了句
回复

使用道具 举报

 楼主| 发表于 2008-3-24 19:59:39 | 显示全部楼层
好的!!我理解了。。谢谢 大家
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-22 20:07 , Processed in 0.031619 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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