3 ruby if-statement switch-statement
作为一个有趣的项目,我正在Ruby中实现Beatnik解释器.如果您从未听说过Beatnik,那么它就是一种深奥的编程语言,其中的操作由源代码中单词的"scrabble score"指定.
无论如何,实现需要针对不同的拼字游戏分数进行不同的操作.这不是特别实现,一个明显的方法是if语句:
if score == 1
...
elsif score == 2
...
else
...
end
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用case语句:
case score
when 1
...
when 2
...
else
...
end
Run Code Online (Sandbox Code Playgroud)
但是这两种方法都没有让我觉得特别优雅,你能提出另一种实现方法吗?
commands = {
1 => ->(p1,p2) {...},
2 => ->(p1,p2) {...},
3 => ->(p1,p2) {...},
}
commands[score].call(p1,p2)
Run Code Online (Sandbox Code Playgroud)
插入代码代替...,并用参数代替p1,p2.这将创建一个称为命令的哈希,从整数分数到匿名函数( - >是lambda的缩写).然后根据分数查找相应的功能,并调用它!