ruby - Delete item from array without returning it -
i'm trying write method cause rspec test pass:
it "starts thing , move on" class.method_1("name one") class.method_1("name two") expect(class.method_2).to eq "some string name one" expect(class.method_3).to eq ["name two"] end
method_1
adds name array, , method_3
returns array (defined in initialize
method):
def method_1(name) @array << name end def method_3 @array end
i figured pretty simple interpolate @array[0]
string , use @array.delete_at(0)
modify array. so:
def method_2 p "some string #{@array[0]}" @array.delete_at(0) end
but method returns "name one"
instead of string. if comment out delete code, string returns array hasn't been modified. i've been in ruby docs long time #shift
has same issue returning removed item.
i'm i've on complicated -- missing?
you can collapse down more conventional ruby this:
class mytestclass attr_reader :array def initialize @array = [ ] end def push(s) @array << s end def special_shift "some string #{@array.shift}" end end
then in terms of usage:
it "starts thing , move on" my_thing.push("name one") my_thing.push("name two") expect(my_thing.special_shift).to eq "some string name one" expect(my_thing.array).to eq ["name two"] end
using names push
, shift
consistent ruby conventions make purpose , action of method lot easier understand.
when comes implementation of method_3
forget can inline whatever want inside #{...}
block, methods modify things. p
method used display, won't return anything. return need have either last thing evaluated (implicit) or using return
(explicit).
Comments
Post a Comment