2013-08-02 62 views
-4
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

+1

您應該添加空格,以便代碼不太可怕。當然,空格不會修復它,因爲誰寫這顯然不關心可讀性,但它至少可以幫助您識別正在使用的操作員。另外,'+',#'不是符號,' - 〜c%3'也不是。再次,加上空格,並且知道你的操作符。 – nil

+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中,這樣的事情很常見,儘管沒有任何好處。在「過去的日子」裏,回到鉛筆之前,我們使用泥板和棍棒進行編程,因爲編譯器無法優化他們的出行方式,所以人們嘗試編寫「密碼」來提高性能。編寫嚴密的代碼要比簡潔和模糊得多。一些被稱爲效率的東西也應該被涉及到,但這往往被拋在後面。

今天的編譯器和解釋器要聰明得多,所以編寫這樣的代碼背後的原因基本消失了。人們喜歡將晦澀難懂的代碼作爲一種挑戰,以儘可能在儘可能小的空間內寫入某些功能,但這不是在真正的編程環境中做的事情,在這種環境中,團隊成員需要閱讀和理解它特別是在他們出城後的凌晨3點,接到一些恐慌的系統管理員的電話。

+0

你一直是真正的幫助。態度和努力,你必須是一個非常善良的人。 –