我情不自禁地注意到我们还没有FizzBuzz in lua。我一直想向卢阿开枪,所以现在什么都没做。
function fizzBuzz(maxNum)
local fizz = "Lua"
local buzz = "Yay"
for i = 1, maxNum do
if i % 15 == 0 then
print(fizz..buzz)
elseif i % 3 == 0 then
print(fizz)
elseif i % 5 == 0 then
print (buzz)
else
print(i)
end
end
end
fizzBuzz(100)1
2
Lua
4
Yay
Lua
7
8
Lua
Yay
11
Lua
13
14
LuaYay
16
17我非常怀疑这是惯用的Lua,所以我愿意接受建议。据我所知,mixedCase和2-空间缩进是路亚的道路,但可以自由地证明我错了。
发布于 2016-08-19 08:53:36
顾名思义,Lua是一种可嵌入的脚本语言。因此,对于如何创建变量或缩进代码没有指导方针。这在很大程度上是开发人员感到舒服的一个因素。
请注意,尽管Lua可以使用风格指南,但它实际上是Python、C和C++风格指南的融合。
我在许多lua程序/模块中看到了两种常见的情况:函数名(如果不是定义为对象的方法)是在snake_case中定义的,如果定义为对象的方法,则使用CamelCase (两个C都大写)。另一个是,一般数据类型的变量(数字、字符串、函数、表、布尔)遵循匈牙利符号。
在您的菲兹巴斯中,在调用print函数时,您为buzz输出提供了额外的空间,而对于其他输出则没有这样的空间。保持一致:
if i % 15 == 0 then
print(fizz..buzz)
elseif i % 3 == 0 then
print(fizz)
elseif i % 5 == 0 then
print(buzz) -- remove whitespace
else
print(i)
end您还可以将fizz..buzz值存储在循环之外,以避免额外的计算。除此之外,一切看起来都很好。
发布于 2016-09-27 01:46:03
虽然hjpotter92对程序员的要求是正确的,但我可以对您的代码进行改进:
local fizz = "Lua"
local buzz = "Yay"
--Keeping them out of scope means the function isn't redeclaring them each time it's run
function fizzBuzz(maxNum)
for i = 1, maxNum do
print(i%15==0 and fizz..buzz or i%5==0 and buzz or i%3==0 and fizz or i)
--By using Lua's logical operators you can cut down on massive chunks of code like the if statements you had made
end
end
fizzBuzz(100)发布于 2017-09-18 13:20:17
Lua逻辑运算符工作有一点独特,因此可以这样做:
function fizzbuzz(num)
return
num%15 == 0
and 'fizzbuzz'
or
num%5 == 0
and 'fizz'
or
num%3 == 0
and 'buzz'
or
tostring(num)
end
for i = 1,100 do
print(fizzbuzz(i))
end注意,这实际上与前面的答案相同,只是格式不同。
我喜欢用这种风格来描述逻辑,它非常容易读懂。
https://codereview.stackexchange.com/questions/139078
复制相似问题