Ruby超级初始化没有正确传递参数

时间:2015-07-03 01:08:12

标签: ruby initialization super

我有一个类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

1 个答案:

答案 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."
    )));
}
?>