Ruby:NoMethodError:改变实例变量时未定义的方法

标签 ruby methods instance

我正在编写一个程序,可以重新安排公交车上的乘客。我想记录一下重新排序公交车上的座位需要多少次洗牌。我以为我已经有了,但我无法更改 self.reshuffle_count。如何从 reshuffle_seating

方法访问 @reshufffle_count
class MagicBus < Array

  attr_writer :seating

  def seating
    @seating || []
  end

  def reshuffle_count
    @reshuffle_count || 0
  end

def reshuffle_seating
    max_passengers = self.seating.max
    popular_seat = self.seating.max
    pop_seat_indx = self.seating.find_index(popular_seat)
    reshuffle_num = 0
    self.seating.rotate!(pop_seat_indx)
    while popular_seat > 1 do 
      self.seating.each_with_index do |seat, index|
      if index != 0
        self.seating[index] = self.seating[index] +1
        popular_seat = popular_seat -1
      else
        reshuffle_num = reshuffle_num +1
        p reshuffle_num
      end
      end
    end
    self.seating.rotate!(pop_seat_indx*-1)
    self.seating[pop_seat_indx] = popular_seat
    self.reshuffle_count = reshuffle_num   
  end
end

class TestMagicBusSeating < MiniTest::Test
def test_reshuffle_seating_instance1
    bus = MagicBus.new
    bus.seating = [0,2,7,0]
    bus.reshuffle_seating
    assert_equal([2, 4, 1, 2], bus.seating)
    assert_equal(5, bus.reshuffle_count)
  end
end

错误消息是

Error:
TestMagicBusSeating#test_reshuffle_seating_instance1:
NoMethodError: undefined method `reshuffle_count=' for []:MagicBus
Did you mean?  reshuffle_count
    magic_bus.rb:99:in `reshuffle_seating'
    magic_bus.rb:217:in `test_reshuffle_seating_instance1'

最佳答案

NoMethodError: undefined method `reshuffle_count='

这意味着您缺少一个setter。您定义了 getter def reshuffle_count 但没有 setter。

class MagicBus < Array

  attr_writer :seating

  def seating
    @seating || []
  end

  def reshuffle_count=(value)
    @reshuffle_count=value
  end

  def reshuffle_count
    @reshuffle_count || 0
  end
  .....

或者正如 @tadman 指出的,attr_writer :resuffle_count

关于Ruby:NoMethodError:改变实例变量时未定义的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66650355/

相关文章:

c# - CollectionChanged 获取保存集合的对象的实例

c++ - 语法使未命名实例

ruby-on-rails - 错误 : rails aborted! LoadError : dlopen(/Users. ..但是是一个不兼容的架构(有 'x86_64' ,需要 'arm64e' ))

ruby - Gem::Ext::BuildError:错误:无法构建 gem native 扩展。架构Linux

java - 从方法返回一个字符

ruby - 如何找到运行时调用 Ruby 方法的位置?

ruby-on-rails - Rails 在重定向时删除资源标识符

Java 还是 Ruby,有区别吗?

java - 在Java中的不同类中使用函数,而不将其作为方法收集在类中

java - 我需要一些帮助来理解实例/引用