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

Project1

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

[推荐问答] 还是晕了,怎么判断变量的类型?

[复制链接]

Lv3.寻梦者

双子人

梦石
0
星屑
3165
在线时间
3616 小时
注册时间
2009-4-4
帖子
4154

开拓者

跳转到指定楼层
1
发表于 2012-9-3 22:11:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问一下怎么判断变量的类型?
像变量@a,如何判断它是数字、数组还是字符串?

我需要用它判断一些东西。

评分

参与人数 2星屑 +248 收起 理由
lsu666666 + 200 !!
sai90306 + 48 塞糖

查看全部评分

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4504
在线时间
5228 小时
注册时间
2009-4-29
帖子
14318

贵宾

来自 11楼
发表于 2012-9-4 21:44:11 | 只看该作者
hys111111 发表于 2012-9-3 22:44
因为变量可以使用$game_variables[2]="字符串"的。
而那个变量,我希望当它是数字时,进行加、减法、大于 ...

虽然P叔不是XP党的,但是我也想参与讨论一下。
a.is_a?(String)并不一定a是数值,也有可能一数组(Array)或者是其他
这里推荐一个rescue的方法吧,是防止弹框出错的妙招。
比如说定义带参数c的方法foo:
  1. def foo(c)
  2.   if c.is_a?(String)  #若c是字符串,那么令c等于0
  3.     c = 0
  4.   end
  5.   b = c * 2
  6.   return b
  7. end
复制代码
这样做,如果c是字符串或者数字都没事,但是如果c是一个数组那肯定是要弹窗报错的。
于是我们有一个万能的办法,只要报错就怎么怎么样,那就是利用rescue:
  1. def foo(c)
  2.   b = c * 2 rescue 0  #不报错就执行b = c * 2,报错就令b等于0
  3.   return b
  4. end
复制代码
利用rescue可以有效地对付弹窗类错误。
VX党首次来XP区讨论,若是有什么不对的地方,请大家指正。

评分

参与人数 1星屑 +200 收起 理由
hys111111 + 200 认可答案(2)

查看全部评分

《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
251 小时
注册时间
2009-11-13
帖子
453
2
发表于 2012-9-3 22:35:22 | 只看该作者
?,不太明白。
按我的理解,它是什么东西,要看你定义的类容。
你定义@a = 23 那它是数字,@a = [s1,s2,s3] 那它就是数组,
别的我也不懂。
回复

使用道具 举报

Lv3.寻梦者

双子人

梦石
0
星屑
3165
在线时间
3616 小时
注册时间
2009-4-4
帖子
4154

开拓者

3
 楼主| 发表于 2012-9-3 22:44:10 | 只看该作者
zxcgood2009 发表于 2012-9-3 22:35
?,不太明白。
按我的理解,它是什么东西,要看你定义的类容。
你定义@a = 23 那它是数字,@a = [s1,s2,s3]  ...

因为变量可以使用$game_variables[2]="字符串"的。
而那个变量,我希望当它是数字时,进行加、减法、大于、小于等操作。
但是是字符串的时候使用这些操作会出错。

于是我想到怎么样先判断它的类型再进行操作。

点评

很多语言能够通过判断类来判断他的操作,而且只能判断类。但是Ruby比较特别,同一类的对象还可以定义不同的方法……  发表于 2012-9-11 16:59
其实,如果要判断能不能减法,可以更精确点 if $game_variables[2].respond_to?(:-)  发表于 2012-9-11 16:58
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
251 小时
注册时间
2009-11-13
帖子
453
4
发表于 2012-9-3 22:50:22 | 只看该作者
变量不够吗?为什么非要一个变量来用,用不同的变量,很方便啊。
回复

使用道具 举报

Lv3.寻梦者

双子人

梦石
0
星屑
3165
在线时间
3616 小时
注册时间
2009-4-4
帖子
4154

开拓者

5
 楼主| 发表于 2012-9-4 12:28:17 | 只看该作者
zxcgood2009 发表于 2012-9-3 22:50
变量不够吗?为什么非要一个变量来用,用不同的变量,很方便啊。

因为那个变量要用于记录一些东西。

为了能在对话框、状态栏等地方显示出来。
我想需要相同的变量,怕麻烦……
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1058
在线时间
878 小时
注册时间
2012-6-28
帖子
1079
6
发表于 2012-9-4 13:20:58 | 只看该作者
我现在也没具体的思路,但你想想能不能用“to_s”什么的,统一转换成某一类再处理?

点评

看下面  发表于 2012-9-4 18:05
不追求华丽的商业素材;不依赖与自己运用能力不符的外挂脚本;不搞华而不实的无用噱头。
                    修改,使用最朴实的素材,融入自己的智慧做最好的游戏!
                                    点这里!暂不设加入门槛
         
                               我觉得我的优点是,会认真的画每一张地图。
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
251 小时
注册时间
2009-11-13
帖子
453
7
发表于 2012-9-4 13:47:34 | 只看该作者
你直接用一个感觉不好控制啊。
我想到一个,用
if 。。。。then
  .......
elsif ....... then
........
end
这种类型的判断@a的类型,为真的时候才执行,不知道行不行。

点评

看下面  发表于 2012-9-4 18:06
回复

使用道具 举报

Lv3.寻梦者

双子人

梦石
0
星屑
3165
在线时间
3616 小时
注册时间
2009-4-4
帖子
4154

开拓者

8
 楼主| 发表于 2012-9-4 14:00:21 | 只看该作者
如果能够像:
  1. if self.is_a?(Game_Player)
复制代码
(上面这个为判断变量是不是哪个class)
类似这样,

但是偏偏想不到,
能不能判断
  1. if $game_variables.is_a?(字符串)
复制代码
如果能类似这样就好了。一定有办法的吧……
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
550
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
9
发表于 2012-9-4 18:15:50 | 只看该作者
有办法!
判断@a的类型
  1. @a.class
复制代码
比如
  1. if @a.class == String # @a是否为字符串
  2.   p "String" # 是字符串的情况下
  3. else
  4.   p "Not str" # 不是字符串的情况下
  5. end
复制代码
当然LS的is_a?更为常见。
  1. if @a.is_a?(String) # 等同于if @a.class == String
  2.   p "String" # 是字符串的情况下
  3. else
  4.   p "Not str" # 不是字符串的情况下
  5. end
复制代码
当然。
  1. $game_variables[1].is_a?(Fixnum) # 判断变量1是否为段整数型
复制代码
也是可以的。

评分

参与人数 4星屑 +206 梦石 +2 收起 理由
hcm + 2 认可答案
zxcgood2009 + 24 长见识了
没是的人 + 2 嗯呢,我还得好好学
eve592370698 + 180 原来是这样啊,

查看全部评分

回复

使用道具 举报

Lv3.寻梦者

双子人

梦石
0
星屑
3165
在线时间
3616 小时
注册时间
2009-4-4
帖子
4154

开拓者

10
 楼主| 发表于 2012-9-4 18:27:16 | 只看该作者
satgo1546 发表于 2012-9-4 18:15
有办法!
判断@a的类型
比如当然LS的is_a?更为常见。当然。也是可以的。


明白了,非常感谢。

我甚至不知道还有XXX.class的用法……

评分

参与人数 2星屑 +6 收起 理由
zxcgood2009 + 4 我很赞同
没是的人 + 2 多谢召唤

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-24 03:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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