查看: 2540|回复: 3

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

[复制链接]
梦石
0
星屑
2859
在线时间
661 小时
注册时间
2012-5-3
回帖
76

开拓者

发表于 2015-4-22 22:38:48 | 显示全部楼层 |阅读模式

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

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

×
    # 添加物品
    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个条件后,到这里直接跳出,然后运行添加后面的物品么?
梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

发表于 2015-4-22 22:58:52 | 显示全部楼层
原则上,if 后面可以接任何表达式
后面的表达式的结果为 nil 或者 false,则 if 条件不成立,如果有 else 就落入 else 中,没有的话直接跳过。
例如:if $game_temp.in_battle
if 条件成立与否看$game_temp.in_battle当前的值,和声明时的没关系。
例如:
[pre lang="Ruby"]a = 0
if a
  print "True"
else
  print "False"
end
# => "True"
[/pre]
感觉给出的代码的if判断越多,写代码的时候应该注意相同的分歧应该合并。
修改此处代码如下,用 unless 判断更方便
[pre lang="Ruby"]for i in 1...$data_items.size
  unless $game_party.item_number(i) == 0 || ($game_temp.in_battle && $data_items.occation > 1)
    @data << $data_items
  end
end[/pre]
回复

使用道具 举报

梦石
0
星屑
2859
在线时间
661 小时
注册时间
2012-5-3
回帖
76

开拓者

 楼主| 发表于 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
回复

使用道具 举报

梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

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


if 后面接表达式指的是
[pre lang="Ruby"]if $data_items.occasion == 0 or $data_items.occasion == 1[/pre]
之后你说的“没有语句”,意思是如果此条件满足(即该物品使用场合为0或者1),那么就什么都不做。如果条件不满足,则直接进行下一次循环(这样会无视掉后面的@data.push(...))。
因此我说这样写的习惯不太好,这就相当于这种情况:
[pre lang="Ruby"]a = true
if a
  print "True"
else
end

if a
  print "True"
end[/pre]
什么都不做的分支应该省略此分支。这里应该用第二种写法。
因此,改成这样为好:
[pre lang="Ruby"]if $data_items.occasion > 1
  next
end[/pre]
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部