.next

2013-03-21 6 views
10
def home 
    letter = 'A' 
    @markers = Location.all.to_gmaps4rails do |loc, marker| 
    marker.infowindow render_to_string(partial: '/locations/info', 
             locals: {object: loc}) 
    marker.picture({picture: "http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=#{letter.next!}|9966FF|000000", 
        width: 32, 
        height: 32, 
        shadow_picture: "http://chart.apis.google.com/chart?chst=d_map_pin_shadow", 
        shadow_width: 110, 
        shadow_height: 110, 
        shadow_anchor: [17,36]}) 
    marker.title "Title - #{loc.name}" 
    marker.sidebar render_to_string(partial: '/locations/sidebar', 
            locals: {object: loc}) 
    marker.json({id: loc.id}) 
    end 
end 

कूल सामग्री का उपयोग कर अक्षरों में वृद्धि। तो यह काम करता है। यह do loop के माध्यम से चक्र बनाता है और पत्र को बढ़ाता है। समस्या यह है कि, यह बी से शुरू होता है। मैंने चित्र में केवल letter का उपयोग करने की कोशिश की, फिर अंत में letter.next!, और यहां तक ​​कि letter = letter.next का उपयोग करके, लेकिन gmaps मुझ पर एक त्रुटि फेंकता है।.next

क्या 'ए' से letter के अलावा कुछ असाइन करने का कोई तरीका है?

उत्तर

21

इस बारे में क्या?

letters = ('A'..'Z').to_a 
letters.shift #=> 'A' 
letters.shift #=> 'B' 

आप जादू को देखने के लिए यह एक :)

letter = '@' 
letter.next! #=> "A" 

चेक '@ABCD'.codepoints.to_a पसंद करेंगे।

+1

ओह आदमी आप 'स्पष्ट' समाधान खोजने के लिए तेज़ी से थे :) –

+1

'@' टिकट है !! – Dudo

6

खैर तकनीकी रूप से, '@', 'A' का पूर्ववर्ती है क्योंकि '@' की ASCII मूल्य 64 है और 'A' का मूल्य 65 का निरीक्षण करें है:

'@'.next == 'A' 
#=> true 

:

'A'.codepoints.first 
#=> 65 

'A'.codepoints.first - 1 
#=> 64 

('A'.codepoints.first - 1).chr 
#=> "@" 

('A'.codepoints.first - 1).chr.next 
#=> "A" 
उस अर्थ में

लेकिन मैं काले जादू ™ के उपयोग को दृढ़ता से हतोत्साहित करता हूं। असली कोड में @ निकोगा के दृष्टिकोण जैसे कुछ का प्रयोग करें।

+1

'63.chr # =>"? " ', अच्छी जानकारी। – shweta

संबंधित मुद्दे

 संबंधित मुद्दे