2010-08-25 7 views
12

मैं हाल ही में इस उपकरण के साथ मेरी रेल कौशल sharpening की कोशिश की है:क्या रूबी कोन्स के लिए एक पूरक गाइड/उत्तर कुंजी है?

http://github.com/edgecase/ruby_koans

लेकिन मैं मुसीबत कुछ परीक्षण गुजर कर रहा हूँ। इसके अलावा मुझे यकीन नहीं है कि क्या मैं कुछ चीजें सही तरीके से कर रहा हूं क्योंकि उद्देश्य केवल परीक्षा उत्तीर्ण करने के लिए है, इसे पास करने में कई तरीके हैं और मैं कुछ ऐसा कर रहा हूं जो मानकों तक नहीं है।

क्या यह पुष्टि करने का कोई तरीका है कि मैं सही काम कर रहा हूं या नहीं?

एक विशिष्ट उदाहरण:

about_nil में

,

def test_nil_is_an_object 
    assert_equal __, nil.is_a?(Object), "Unlike NULL in other languages" 
end 
तो

यह है कि दूसरे खंड एक वस्तु (तो मैं कह सकता हूँ शून्य एक वस्तु है) या बस के बराबर है की जाँच करने के कह रहा है assert_equal true, nil.is_a?(Object) डालें क्योंकि कथन सत्य है?

और अगले टेस्ट:

def test_you_dont_get_null_pointer_errors_when_calling_methods_on_nil 
    # What happens when you call a method that doesn't exist. The 
    # following begin/rescue/end code block captures the exception and 
    # make some assertions about it. 
    begin 
    nil.some_method_nil_doesnt_know_about 
    rescue Exception => ex 
    # What exception has been caught? 
    assert_equal __, ex.class 

    # What message was attached to the exception? 
    # (HINT: replace __ with part of the error message.) 
    assert_match(/__/, ex.message) 
    end 
end 

IM अनुमान मैं assert_match में एक "कोई विधि त्रुटि" स्ट्रिंग, लेकिन क्या assert_equal के बारे में रखना चाहिए?

+0

दिलचस्प, koans के बारे में पता नहीं था, उन्हें कोशिश होगा। शायद मदद मांगना, या उन चीजों पर सलाह की तलाश करना जो आपको नहीं लगता है, लेकिन अधिक विशिष्ट होने के कारण, आपको बेहतर जवाब मिलेंगे – Chubas

उत्तर

9

assert_equal true, nil.is_a?(Object) वास्तव में सही समाधान है। सवाल यह है कि "रूबी वस्तुओं में नाखून हैं या नहीं?", और रुबी के मामले में, वे हैं। इस प्रकार, दावे को पारित करने के लिए, आपको उस परीक्षा की सच्चाई पर जोर देना चाहिए।

दूसरे उदाहरण में, जब आप शून्य पर एक अपरिभाषित विधि कहते हैं, तो आपको NoMethodError: undefined method 'foo' for nil:NilClass मिलता है। इस प्रकार, अपवाद वर्ग NoMethodError है, और संदेश undefined method 'foo' for nil:NilClass है। एक कंसोल में असफल व्यवहार का परीक्षण करें, और देखें कि आप इससे क्या प्राप्त करते हैं, और उसके बाद उस ज्ञान को परीक्षण में लागू करें।

+1

सिर के लिए धन्यवाद! तो क्या इसका मतलब यह है कि मुझे अपने सहज ज्ञान पर भरोसा करना होगा कि क्या मैंने सही किया था? क्या यह जांचने का कोई तरीका नहीं है कि मैंने जो किया वह रूबी सम्मेलन के लिए सही और सही था? – corroded

+0

कभी-कभी वाक्यांश को उत्तर देने के लिए एक से अधिक सही तरीके हैं, जैसे वास्तविक जीवन –

2

ठीक है, रेड-ग्रीन-रिफैक्टर के विशिष्ट टीडीडी आदर्श वाक्य के साथ, आपको परीक्षण (शायद एक अलग कंसोल में रेक के साथ) चलाना चाहिए और विफलता दिखाई देनी चाहिए। वहां से, उन्होंने आपको अपेक्षित चीज़ों के बारे में जानकारी के कुछ टुकड़े प्रदान किए हैं।

शैली के लिए, कोन वास्तव में इसे पढ़ा नहीं रहे हैं। आपको रूबी समुदाय के ठेठ सम्मेलनों और मुहावरे के लिए एक महसूस करने के लिए रूबी में लिखे गए कुछ कोड को ढूंढना और पढ़ना चाहिए।

+0

आप 'रेक' का उपयोग किस फ़ाइल पर करेंगे? – isomorphismes

1

मुझे याद है जब मैं इस किया था मैं बाहर सोचने के लिए परीक्षण की कोशिश की और

<Answer> and <"Answer"> 

में याद करने के लिए बात डालने की कोशिश की है कि है कि वास्तविक वर्ग एक स्ट्रिंग या कुछ में होना जरूरी नहीं है । तो जवाब जैसा कि ऊपर का सुझाव दिया, आईआरबी में कोड डाल दिया और यह निष्पादित नहीं

ex.class, ex.class 

है।

(1..5).class == Range 

एक बड़ा संकेत

5

आप कमांड प्रॉम्प्ट पर

ruby path_to_enlightenment.rb 

चला रहे हैं आप प्रत्येक परीक्षा ठीक करने के बाद है? यह आपको बहुत मदद करेगा।

यह भी याद रखें कि "चुप्पी कभी-कभी सबसे अच्छी प्रतिक्रिया होती है" - अगर आप स्टंप हो जाते हैं तो कुछ भी नहीं डालते हैं और टूल आपकी मदद करेगा।

2

रूबी कोअन्स के साथ सरलता कुंजी है - जब मैंने इसे शुरू किया तो मैंने सोचा कि यह होना चाहिए जितना कठिन है, लेकिन यह नहीं है! बस आईआरबी से सवाल पूछें कि कोन्स आपको पूछ रहा है, और कुछ के बाद आपको इसके लिए एक महसूस हो रहा है। के बारे में यह, दूसरों की मदद करना भी मैं एक ब्लॉग टुकड़ा लिखा है:

Ruby Koans Answers

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