2011-10-25 1 views
5

मैं एक चेकर्स प्रोग्राम को दोबारा कर रहा हूं, और मैं एक खिलाड़ी को अनुरोध करने की कोशिश कर रहा हूं (उदाहरण के लिए "3, 3, 5, 5" के रूप में) int में सरणी। मैं निम्न विधि है, लेकिन के रूप में मैं जानता हूँ कि यह हो सकता है यह रूबी की तरह के रूप में महसूस नहीं करता:रूबी रिफैक्टरिंग: स्ट्रिंग सरणी को int सरणी में परिवर्तित करना

def translate_move_request_to_coordinates(move_request) 
    return_array = [] 
    coords_array = move_request.chomp.split(',') 
    coords_array.each_with_index do |i, x| 
     return_array[x] = i.to_i 
    end 
    return_array 
    end 

मैं इसके साथ निम्नलिखित RSpec परीक्षण किया है।

it "translates a move request string into an array of coordinates" do 
     player_input = "3, 3, 5, 5" 
     translated_array = @game.translate_move_request_to_coordinates(player_input) 
     translated_array.should == [3, 3, 5, 5] 
    end 

परीक्षण पास होता है, लेकिन मुझे लगता है कि कोड बहुत बदसूरत है। किसी भी सहायता की सराहना की जाएगी। धन्यवाद।

स्टीव

उत्तर

22

आप एक नक्शे के आपरेशन के द्वारा each की स्पष्ट यात्रा की जगह सकता है:

move_request.chomp.split(',').map { |x| x.to_i } 

रूप @tokland द्वारा प्रस्तावित इस लेखन का अधिक संक्षिप्त तरीका है:

move_request.chomp.split(',').map(&:to_i) 

यह स्पष्ट रूप से एक ब्लॉक लिखने और x जैसे परिवर्तनीय नाम का चयन करने से बचाता है जो कि किसी भी नाम के रूप में प्रासंगिक नहीं है।

कृपया stackoverflow पद पर एक नजर है What does to_proc method mean?

+8

move_request.split (",") मानचित्र। (और: to_i) – tokland

+0

+1: मैं यह नहीं जानता था। पेज 363 (चौथा प्रिंटिंग, मई 2011) पर "द सिंबल.तो_प्रोक ट्रिक" खंड में [प्रोगामेटिक बुक्सहेल्फ़] (http://pragprog.com/) से "प्रोग्रामिंग रूबी 1.9" पुस्तक में इसकी एक दिलचस्प व्याख्या है। – lkuty