-1
class Airplane
  attr_reader :weight, :aircraft_type
  attr_accessor :speed, :altitude, :course

  def initialize(aircraft_type, options = {})
    @aircraft_type  = aircraft_type.to_s 
    @course = options[:course.to_s + "%"] || rand(1...360).to_s + "%" 
  end 

initialize1から360までのハッシュに最小および最大許容値を使用するにはどうすればよいですか?

例:

airplane1 = Airplane.new("Boeing 74", course: 200)
p radar1.airplanes
=> [#<Airplane:0x000000023dfc78 @aircraft_type="Boeing 74", @course="200%"]

しかし、コース値370に設定した場合、airplane1は機能しないはずです。

4

3 に答える 3

1

{course: '9000%'}人々にfor のようなものを渡させたくない、optionsそしてそれが無効な場合はエラーを出したいという意味だと思います。その場合は、範囲内にあるかどうかをテストできます。

def initialize(aircraft_type, options = {})
  @aircraft_type  = aircraft_type.to_s 
  allowed_range = 1...360
  passed_course = options[:course]
  @course = case passed_course
    when nil
      "#{rand allowed_range}%"
    when allowed_range
      "#{passed_course}%"
    else 
      raise ArgumentError, "Invalid course: #{passed_course}"
  end
end 
于 2012-05-24T18:27:00.927 に答える
1

これはリファクタリングできると確信していますが、これが私が思いついたものです

class Plane

  attr_reader :weight, :aircraft_type
  attr_accessor :speed, :altitude, :course

  def initialize(aircraft_type, options = {})
    @aircraft_type = aircraft_type.to_s 
    @course = options[:course] || random_course
    check_course  
  end

  def check_course
   if @course < 1 or @course > 360
      @course = 1
      puts "Invalid course. Set min"
     elsif @course > 360
      @course = 360
      puts "Invalid course. Set max"
     else
      @course = @course
     end
   end

   def random_course
    @course = rand(1..360)
   end

end
于 2012-05-24T18:33:30.330 に答える
1

course角度ですね。0...360それはそれの有効な範囲であるべきではありませんか?なぜ最後の「%」なのですか?なぜ整数の代わりに文字列を扱うのでしょうか?

とにかく、それは私が書くことです:

@course = ((options[:course] || rand(360)) % 360).to_s + "%"
于 2012-05-24T18:34:31.470 に答える