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

Project1

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

[已经解决] 有关条件分歧的一些小问题。

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2324
在线时间
567 小时
注册时间
2012-5-3
帖子
86

开拓者

跳转到指定楼层
1
发表于 2015-4-22 22:38:48 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
    # 添加物品
    for i in 1...$data_items.size
      if $game_party.item_number(i) > 0
        if $game_temp.in_battle
          if $data_items[i].occasion == 0 or $data_items[i].occasion == 1
           else
            next
          end
        end
        @data.push($data_items[i])
      end
    end
这段代码大神都知道什么意思了。我想请教一下。这里面的第二个分歧那里.in_battle后面没有声明是false或者是true的话。是默认为在$game_temp里面声明的那个false值么?如果在这里声明了,就是这里调用的值,对吧?

还有一个问题就是。。这里的条件分歧。第三个if后面紧接着else,这个地方该如何理解啊?是指满足前面3个条件后,到这里直接跳出,然后运行添加后面的物品么?

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

4
发表于 2015-4-23 08:17:48 | 只看该作者
本帖最后由 RyanBern 于 2015-4-23 08:20 编辑
邱小谦 发表于 2015-4-22 23:39
谢谢你的回答。但是有一点我没明白。就是说。if后面一般不是得带表达式么?那样才会执行东西。这里的第三 ...


if 后面接表达式指的是
RUBY 代码复制
  1. if $data_items[i].occasion == 0 or $data_items[i].occasion == 1

之后你说的“没有语句”,意思是如果此条件满足(即该物品使用场合为0或者1),那么就什么都不做。如果条件不满足,则直接进行下一次循环(这样会无视掉后面的@data.push(...))。
因此我说这样写的习惯不太好,这就相当于这种情况:
RUBY 代码复制
  1. a = true
  2. if a
  3.   print "True"
  4. else
  5. end
  6.  
  7. if a
  8.   print "True"
  9. end

什么都不做的分支应该省略此分支。这里应该用第二种写法。
因此,改成这样为好:
RUBY 代码复制
  1. if $data_items[i].occasion > 1
  2.   next
  3. end
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2324
在线时间
567 小时
注册时间
2012-5-3
帖子
86

开拓者

3
 楼主| 发表于 2015-4-22 23:39:23 | 只看该作者
RyanBern 发表于 2015-4-22 22:58
原则上,if 后面可以接任何表达式
后面的表达式的结果为 nil 或者 false,则 if 条件不成立,如果有 else  ...

谢谢你的回答。但是有一点我没明白。就是说。if后面一般不是得带表达式么?那样才会执行东西。这里的第三个if后面就是一个判断,后面直接是else,然后就进行下一次了。这个if...else之间没有语句啊。这个怎么判定?

点评

你也可以写 if n == 0 ; end 尽管 n 等于 0 时满足条件, 但条件中间什么内容都没有,所以同样什么都不执行。  发表于 2015-4-23 09:28
if 和 else 之间什么也没有,也就是说满足 if 这个条件后,什么都不执行。  发表于 2015-4-23 09:25
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

2
发表于 2015-4-22 22:58:52 | 只看该作者
原则上,if 后面可以接任何表达式
后面的表达式的结果为 nil 或者 false,则 if 条件不成立,如果有 else 就落入 else 中,没有的话直接跳过。
例如:if $game_temp.in_battle
if 条件成立与否看$game_temp.in_battle当前的值,和声明时的没关系。
例如:
RUBY 代码复制
  1. a = 0
  2. if a
  3.   print "True"
  4. else
  5.   print "False"
  6. end
  7. # => "True"

感觉给出的代码的if判断越多,写代码的时候应该注意相同的分歧应该合并。
修改此处代码如下,用 unless 判断更方便
RUBY 代码复制
  1. for i in 1...$data_items.size
  2.   unless $game_party.item_number(i) == 0 || ($game_temp.in_battle && $data_items[i].occation > 1)
  3.     @data << $data_items[i]
  4.   end
  5. end
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-12 01:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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