2013-02-06 83 views
2

的常量我嘗試以下,但得到了一個錯誤「錯誤的參數數目(2 0)」:紅寶石 - 相同類型的類

class Rating 
    NOOB = Rating.new(1, "U A NOOB") 
    def initialize(rating, message) 
    @rating = rating 
    @message = message 
    end 
end 

什麼是寫在紅寶石下面的相同呢? (這是我做的枚舉的方式)

public class Rating { 
    public static Rating NOOB = new Rating(1, "U SO NOOB"); 
    public static Rating EXPERT = new Rating(2, "U A PRO BRO"); 

    private int rating; 
    private String message; 

    public Rating(int rating, String message) { 
    this.rating = rating; 
    this.message = message; 
    } 
    ... 
} 

回答

1

它的工作原理,如果你把

NOOB = Rating.new(1, "U A NOOB") 

低於initialize的定義,否則解釋器還沒有解釋它,但並不知道它所需的參數。

+1

這並不是解釋者不知道它需要的論據。而是調用默認的'initialize',它取零參數。 – sawa

0

出於某種原因,如果你把常量聲明在初始化塊結束它的工作原理:

class Rating 
    def initialize(rating, message) 
    @rating = rating 
    @message = message 
    end 
    NOOB = new(1, "U A NOOB") 
end 

p Rating::NOOB 
=> #<Rating:0x0000000162a9c0 @rating=1, @message="U A NOOB">