Project1
标题: 有关条件分歧的一些小问题。 [打印本页]
作者: 邱小谦 时间: 2015-4-22 22:38
标题: 有关条件分歧的一些小问题。 # 添加物品
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个条件后,到这里直接跳出,然后运行添加后面的物品么?
作者: RyanBern 时间: 2015-4-22 22:58
原则上,if 后面可以接任何表达式
后面的表达式的结果为 nil 或者 false,则 if 条件不成立,如果有 else 就落入 else 中,没有的话直接跳过。
例如:if $game_temp.in_battle
if 条件成立与否看$game_temp.in_battle当前的值,和声明时的没关系。
例如:
a = 0
if a
print "True"
else
print "False"
end
# => "True"
a = 0
if a
print "True"
else
print "False"
end
# => "True"
感觉给出的代码的if判断越多,写代码的时候应该注意相同的分歧应该合并。
修改此处代码如下,用 unless 判断更方便
for i in 1 ...$data_items.size
unless $game_party .item_number ( i) == 0 || ( $game_temp.in_battle && $data_items [ i] .occation > 1 )
@data << $data_items [ i]
end
end
for i in 1 ...$data_items.size
unless $game_party .item_number ( i) == 0 || ( $game_temp.in_battle && $data_items [ i] .occation > 1 )
@data << $data_items [ i]
end
end
作者: 邱小谦 时间: 2015-4-22 23:39
RyanBern 发表于 2015-4-22 22:58
原则上,if 后面可以接任何表达式
后面的表达式的结果为 nil 或者 false,则 if 条件不成立,如果有 else ...
谢谢你的回答。但是有一点我没明白。就是说。if后面一般不是得带表达式么?那样才会执行东西。这里的第三个if后面就是一个判断,后面直接是else,然后就进行下一次了。这个if...else之间没有语句啊。这个怎么判定?
作者: RyanBern 时间: 2015-4-23 08:17
本帖最后由 RyanBern 于 2015-4-23 08:20 编辑
邱小谦 发表于 2015-4-22 23:39
谢谢你的回答。但是有一点我没明白。就是说。if后面一般不是得带表达式么?那样才会执行东西。这里的第三 ...
if 后面接表达式指的是
if $data_items [ i] .occasion == 0 or $data_items [ i] .occasion == 1
if $data_items [ i] .occasion == 0 or $data_items [ i] .occasion == 1
之后你说的“没有语句”,意思是如果此条件满足(即该物品使用场合为0或者1),那么就什么都不做。如果条件不满足,则直接进行下一次循环(这样会无视掉后面的@data.push(...))。
因此我说这样写的习惯不太好,这就相当于这种情况:
a = true
if a
print "True"
else
end
if a
print "True"
end
a = true
if a
print "True"
else
end
if a
print "True"
end
什么都不做的分支应该省略此分支。这里应该用第二种写法。
因此,改成这样为好:
if $data_items [ i] .occasion > 1
next
end
if $data_items [ i] .occasion > 1
next
end
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1