def play(i)
s=%w[Rock Paper Scissors]
p=s.index i
s[c=rand(3)]+",#{p==c ?:Draw: p&&p==-~c%3?:Win: :Lose}"
end
play("Rock")
我可以请求帮助解释语法
s[c=rand(3)]+",#{p==c ?:Draw: p&&p==-~c%3?:Win: :Lose}"
除了总体而言,它是三元的,但是其他符号如+“,#或 - ~c%3
答案 0 :(得分:2)
冥想这一点,并阅读有关~
和%
等操作符的信息:
ROCK_PAPER_SCISSORS = %w[Rock Paper Scissors]
def play(i)
p = ROCK_PAPER_SCISSORS.index i
response = rand(3)
win_lose_draw = if (p == response)
:Draw
else
if (p && p == -~response % 3)
:Win
else
:Lose
end
end
ROCK_PAPER_SCISSORS[response] + ",#{ win_lose_draw }"
end
puts play("Rock")
在我看来,无论是谁写了原文都迷恋于编写模糊不清的代码,认为它是男子气概,或者是在试图编写一些边缘混淆的东西。无论哪种方式,都不要试图模仿这个例子,特别是在Ruby中。
在C和Perl中,这种情况很常见,但实际上没有任何好处。在过去的日子里,在有铅笔之前,我们使用泥片和棒进行编程,我们背负着无法优化自己的方式的编译器,所以人们尝试写作& #34;紧"用于提高性能的代码。编写严密的代码比编写简洁而晦涩难懂更多;也应该涉及一些所谓的效率,但这通常会被遗忘。
今天的编译器和解释器更加智能,因此编写此类代码背后的原因基本消失了。人们喜欢将模糊的代码写成一个挑战,在尽可能小的空间内编写功能的东西"只是因为",但它不是在真实的编程环境中做的事情,你在那里' ;团队成员需要阅读和理解它,特别是凌晨3点他们已经出城并接到一些恐慌系统管理员的电话。