我是ruby新手,我的问题是传递一个hash:f=>32对我来说也是新的,我不知道如何提取该对中的值(32)。我想知道如何提取它,这样我就可以将这个数字转换成f或c。这是一个家庭作业吗?你也可以使用它,这基本上是一个获取散列参数并将属性分配给变量的速记。如

我是ruby新手,我的问题是传递一个hash:f=>32对我来说也是新的,我不知道如何提取该对中的值(32)。我想知道如何提取它,这样我就可以将这个数字转换成f或c。这是一个家庭作业吗?你也可以使用它,这基本上是一个获取散列参数并将属性分配给变量的速记。如,ruby,Ruby,我是ruby新手,我的问题是传递一个hash:f=>32对我来说也是新的,我不知道如何提取该对中的值(32)。我想知道如何提取它,这样我就可以将这个数字转换成f或c。这是一个家庭作业吗?你也可以使用它,这基本上是一个获取散列参数并将属性分配给变量的速记。如果我有两个参数,这适用吗?例如:def initialize(temp)@f=temp[:f]@c=temp[:c]end您可以有一个包含任意多个键的散列。老实说,我不知道为什么在类为您进行转换时,您会希望接受同时包含F和C的输入。等等,您的意


我是ruby新手,我的问题是传递一个hash
:f=>32
对我来说也是新的,我不知道如何提取该对中的值(
32
)。我想知道如何提取它,这样我就可以将这个数字转换成f或c。这是一个家庭作业吗?你也可以使用它,这基本上是一个获取散列参数并将属性分配给变量的速记。如果我有两个参数,这适用吗?例如:
def initialize(temp)@f=temp[:f]@c=temp[:c]end
您可以有一个包含任意多个键的散列。老实说,我不知道为什么在类为您进行转换时,您会希望接受同时包含F和C的输入。等等,您的意思是什么?你的意思是我不需要def初始化吗?如果我有两个参数,这适用吗?例如:
def initialize(temp)@f=temp[:f]@c=temp[:c]end
您可以有一个包含任意多个键的散列。老实说,我不知道为什么在类为您进行转换时,您会希望接受同时包含F和C的输入。等等,您的意思是什么?你的意思是我不需要def初始化吗?谢谢你的输入。当我知道我可以使用散列加键来获取值时,我就明白了。没问题。我只是在逃避自己的工作,TBH。希望不是太多。谢谢你的意见。当我知道我可以使用散列加键来获取值时,我就明白了。没问题。我只是在逃避自己的工作,TBH。希望不是太多。
Temperature.new(:f => 32).in_celsius #=> 0
class Temperature      
  def initialize(f = 0, c = 0)
    @f = f
    @c = c 
  end

  def in_fahrenheit
    c = @c * 1.8
    c += 32
    @f = c.floor
    @f 
  end

  def in_celsius
    f = @f - 32
    f /= 1.8
    @c = f.floor
    @c 
  end

  def fahrenheit
    @f 
  end 

  def celsius
    @c 
  end
end
  def initialize(temp)
    @f = temp[:f] 
  end
class Temperature

  def initialize(input)
    puts "in #{self.class}.#{__method__}, input.class.name is: #{input.class.name}"
    @f, @c = input[:f], input[:c]
  end

  def in_fahrenheit
    return @f if @f
    c = @c * 1.8
    c += 32
    @f = c.floor
    @f 
  end

  def in_celsius
    return @c if @c
    f = @f - 32
    f /= 1.8
    @c = f.floor
    @c 
  end

  def fahrenheit
    return @f if @f
    in_fahrenheit
  end 

  def celsius
    return @c if @c
    in_celsius
  end

end
> t = Temperature.new(f: 32)
in Temperature.initialize, input.class.name is: Hash
 => #<Temperature:0x0000000996cbf8 @f=32, @c=nil> 
> t = Temperature.new(f: 32)
 => #<Temperature:0x00000009856ca0 @f=32, @c=nil> 
> t.fahrenheit
 => 32 
> t.celsius
 => 0 
> t.in_fahrenheit
 => 32
> t.in_celsius
 => 0 
> t = Temperature.new(c: 0)
 => #<Temperature:0x0000000986b038 @f=nil, @c=0> 
> t.fahrenheit
 => 32 
> t.celsius
 => 0 
> t.in_fahrenheit
 => 32 
> t.in_celsius
 => 0 
t = Temperature.new(f: 32, c: 32)
class Temperature

  def initialize(input)
    puts "in #{self.class}.#{__method__}, input.class.name is:"<<" #{input.class.name}"
    @f, @c = input[:f], input[:c]
    raise "Only one input, please!" if @f and @c
  end

  def in_fahrenheit
    return @f if @f
    c = @c * 1.8
    c += 32
    @f = c.floor
    @f 
  end

  def in_celsius
    return @c if @c
    f = @f - 32
    f /= 1.8
    @c = f.floor
    @c 
  end

  def fahrenheit
    return @f if @f
    in_fahrenheit
  end 

  def celsius
    return @c if @c
    in_celsius
  end

end
> t = Temperature.new(f: 32, c: 0)
in Temperature.initialize, input.class.name is: Hash
RuntimeError: Only one input, please!
  def initialize(f = 0, c = 0)
    puts "f is #{f.inspect}"
    puts "c is #{c.inspect}"
  end
Temperature.new(:f => 32)
f is {:f=>32}
c is 0
Temperature.new(32)
f is 32
c is 0

Temperature.new(0, 32)
f is 0
c is 32
  def initialize(options)
    f = options[:f]
    c = options[:c]
    puts "f is #{f.inspect}"
    puts "c is #{c.inspect}"
  end
Temperature.new(:f => 32)
f is 32
c is nil

Temperature.new(:c => 32)
f is nil
c is 32
Temperature.new(f: 32)
f is 32
c is nil

Temperature.new(c: 32)
f is nil
c is 32
  def initialize(f: nil, c: nil)
    puts "f is #{f.inspect}"
    puts "c is #{c.inspect}"
  end
Temperature.new(f: 32)
f is 32
c is nil

Temperature.new(c: 32)
f is nil
c is 32
Temperature.new(x: 32)
ArgumentError: unknown keyword: x
Temperature.new({:f => 32})
f is 32
c is nil