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}"
它是三元 if 而不是整体,但其他符号是什么,如 +"、# 或 -~c%3
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}"
它是三元 if 而不是整体,但其他符号是什么,如 +"、# 或 -~c%3
沉思于此,并阅读诸如~
and之类的运算符%
:
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 中,这样的事情很常见,尽管没有任何好处。在“过去”,在铅笔出现之前,我们使用泥板和木棒进行编程,我们被编译器所困扰,无法优化它们的出路,所以人们尝试编写“紧凑”的代码来提高性能。编写紧凑的代码比简洁和晦涩要多得多。所谓的效率也应该涉及,但它经常被抛在后面。
今天的编译器和解释器要聪明得多,因此编写此类代码的原因在很大程度上已经不复存在。人们喜欢编写晦涩难懂的代码作为一种挑战,“仅仅因为”在尽可能小的空间内编写功能性代码,但这不是在真正的编程环境中要做的事情,在这种环境中,团队成员需要阅读和理解它,尤其是在凌晨 3 点,他们已经出城并接到了一些惊慌失措的系统管理员的电话。