لا يمكن إكراه السلسلة في فيكسنوم في درس تيست فيرست

StackOverflow https://stackoverflow.com//questions/25045302

  •  21-12-2019
  •  | 
  •  

سؤال

أنا أعمل من خلال TestFirst.org الدروس وحصلت على رسالة خطأ لا أستطيع فك:

 Failure/Error: repeat("hello").should == "hello hello"
 TypeError:
   String can't be coerced into Fixnum
 # ./03_simon_says/simon_says.rb:13:in `+'
 # ./03_simon_says/simon_says.rb:13:in `block in repeat'
 # ./03_simon_says/simon_says.rb:12:in `times'
 # ./03_simon_says/simon_says.rb:12:in `repeat'
 # ./03_simon_says/simon_says_spec.rb:39:in `block (3 levels) in <top (required)>'

هنا هو رمز تلك الأخطاء يتحدثون عن ("ديف تكرار" هو خط 09)

def repeat (say, how_many=2)
    repetition = say
    how_many = how_many-1

    how_many.times do |repetition|
        repetition = repetition + " " + say
    end

    return repetition
end

وهنا هو اختبار أشعل النار التي انطلقت:

it "should repeat a number of times" do
  repeat("hello", 3).should == "hello hello hello"
end

أفهم أن رسالة الخطأ تتعلق بمحاولة استخدام سلسلة مثل قيمة رقمية ولكن لا يمكنني رؤية كيف أو مكان حدوث ذلك

هل كانت مفيدة؟

المحلول

أدناه هو مصدر المشكلة

repetition = repetition + " " + say
#              ^ this is a Fixnum

في الخط repetition + " " + say, ، أنت تحاول أن تفعل سلسلة بين أ Fixnum و String المثال ، الذي تسبب في الخطأ لا يمكن إكراه السلسلة في فيكسنوم.

2.1.2 :001 > 1 + ""
TypeError: String can't be coerced into Fixnum
        from (irb):1:in `+'
        from (irb):1
        from /home/arup/.rvm/rubies/ruby-2.1.2/bin/irb:11:in `<main>'
2.1.2 :002 >

يمكن كتابة التعليمات البرمجية الخاصة بك على النحو التالي :

#!/usr/bin/env ruby

def repeat (say, how_many = 1)
  ("#{say} " * how_many).strip
end

في بلدي اختبار.الميزانية العادية ملف :-

require_relative "../test.rb"

describe "#repeat" do
  it "returns 'hello' 3 times" do
    expect(repeat('hello', 3)).to eq('hello hello hello')
  end
end

يتيح تشغيل الاختبار :-

arup@linux-wzza:~/Ruby> rspec spec/test_spec.rb
.

Finished in 0.00129 seconds (files took 0.1323 seconds to load)
1 example, 0 failures
arup@linux-wzza:~/Ruby>

تحديث

repetition = say
how_many = how_many-1
  how_many.times do |repetition|

إذا كنت تعتقد, repetition أعلن خارج الكتلة وداخل الكتلة هي نفس الشيء, ، أنت تماما خطأ.هم مختلفون ، كما خلقوا في 2 نطاقات مختلفة.انظر المثال أدناه :-

var = 2
2.times { |var| var = 10 } # shadowing outer local variable - var
var # => 2
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top