2016-12-17 27 views
0

在我的寶石,我有一類叫做Client,我想這樣的操作:錯號碼參數錯誤,而建設一個可鏈接的紅寶石API

client = Client.new 
client.content_type('pages').content_type 

這意味着我要設置一個屬性,然後期待立即讓它回到同一個鏈條中。這是我到目前爲止有:

class Client 
    attr_reader :content_type 

    def initialize(options = {}) 
    @options = options 
    end 

    def content_type 
    @content_type 
    end 

    def content_type(type_id) 
    @content_type = type_id 
    self 
    end 
end 

現在,當我嘗試運行client.content_type('pages').content_type我得到:

wrong number of arguments (given 0, expected 1) (ArgumentError) 
    from chaining.rb:16:in `<main>' 

我在做什麼錯?我如何正確寫入?

回答

1

你的方法的名稱相沖突。第二種方法是覆蓋第一種。無論是使用不同的名稱或合併做兩人都喜歡:

class Client 
    attr_reader :content_type 

    def initialize(options = {}) 
    @options = options 
    end 

    def content_type(type_id = nil) 
    type_id ? @content_type : set_content_type(type_id) 
    end 

    def set_content_type(type_id) 
    @content_type = type_id 
    self 
    end 
end 

順便說一句,這個代碼很臭。除非你有充分的理由,否則你不應該這樣做。

+0

你能可能幫助我提高了代碼的設計?更好的設計會是什麼樣子? –

+1

@Amit我建議'content_type'應該是你的類的'attr_accessor',所以你可以'client.content_type =「pages」'或'client.content_type#輸出「pages」'。 –