我有一个类Temperature,有两个子类,Celsius和Fahrenheit,它们在initialize方法中使用一个带有Fixnum的参数作为温度,然后调用super初始化,并将温度作为选项哈希中的条目。
但是,如果我调用Celsius.new(50)
,在超类初始化代码中我得到错误" NoMethodError:
未定义的方法`每个' 50:Fixnum"意味着子类构造函数中的原始参数不作为选项哈希传递。
我不能为我的生活弄清楚为什么会发生这种情况!
请参阅下面的代码:
class Temperature
def initialize(opts={})
opts.each { |k,v| instance_variable_set("@#{k}", v) }
end
def self.from_celsius(c)
Temperature.new(:c => c)
end
def self.from_fahrenheit(f)
Temperature.new(:f => f)
end
def self.ftoc(n)
(n - 32) * (5.0 / 9.0)
end
def self.ctof(n)
n * (9.0 / 5.0) + 32
end
def in_fahrenheit
@f.nil? ? Temperature.ctof(@c) : @f
end
def in_celsius
@c.nil? ? Temperature.ftoc(@f) : @c
end
end
class Celsius < Temperature
def initialze(n)
super(:c => n)
end
end
class Fahrenheit < Temperature
def initialize(n)
super(:f => n)
end
end
答案 0 :(得分:2)
发现问题:
<?php
if (session_status() === PHP_SESSION_NONE) session_start();
print_r($_SESSION);
if (!isset($_SESSION['userid']))
{
die(json_encode(array(
"error",
"You must be logged in to view report data."
)));
}
?>