【读书笔记】语言基础-补充知识 练习(十四)

练习1. 大多数C语法风格的编程语言都不支持elseif结构,为什么Lua语言比这些语言更需要这种结构?

        Lua语言不支持switch语言,每个代码块结束都有一个end,elseif结构比多个if性能更高

练习2. 描述Lua语言中实现无条件循环的4种不同方法,你喜欢哪一种?

               

while true do
    expression
end

for i = 1, math.huge do
    expression
end

repeat
    expression
until nil

::s1:: do
    expression
    goto s1
end

练习3:很多人认为,repeat-until 很少使用,因此在像Lua语言这个的简单的编程语言最好不要出现,你怎么看?

        repeate-until类似于do-while 语句,都是先执行后判断,保证会执行一遍,Lua语言没有do-while,可以用repeate-until实现。

注意:do-while条件不成立是退出循环,repeate-until是条件成立时退出循环

练习4:

        

 

function room1()
	local move = io.read()
	if move == "south" then
		return room3()
	elseif move == "east" then
		return room2()
	else
		print("invalid move")
	return room1()
	end
end

function room2()
	local move = io.read()
	if move == "south" then
		return room4()
	elseif move == "west" then
		return room1()
	else
		print("invalid move")
	return room2()
	end
end

function room3()
	local move = io.read()
	if move == "north" then
		return room4()
	elseif move == "east" then
		return room1()
	else
		print("invalid move")
	return room3()
	end
end

function room4()
	print("Congratulations, you won!")
end

room1()

练习5:请解释一下为什么Lua语言会限制goto语句不能跳出一个函数。

        答:不同函数之间如果能使用goto跳转会导致代码可读性变差,不利于维护,其次,直接跳转到某个变量的作用域,却绕过了变量的声明将会发生无法预料的错误

练习6:假设goto语句可以跳转出函数,请说明实例8.3中程序将会如何执行。请试着解释为什么标签要使用与局部变量相同的作用范围规则。

-- 一种诡异且不正确的goto语句的使用
function getlabel()
    return function() goto L1 end  -- 执行到这一步会出错,Lua语言不允许goto跳转到函数外
    ::L1::
    return 0
end
function f(n)
    if n == 0 then return getlabel()
    else
       local res = f(n - 1)
       print(n)
       return res
     end
end
x = f(10)
x()

答:假设标签是全局的,此时使用goto直接跳转到某个变量的作用域,却绕过了变量的声明会发生无法预料的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值