2011-12-05 57 views
0
  1. 爲了打電話MyClass::empty().empty
    我是否需要在side MyClass中實現一個空方法?我會在裏面寫什麼?如何實現一些Ruby概念?

  2. 之後,我不知道如何這樣的電話可以工作:x = MyClass::empty().add("a").add("b")
    這將是簡單地調用Add方法,如果它是空的?

+0

'MyClass :: empty()。empty'會返回什麼?爲什麼不簡單地使用'MyClass :: empty()'? – Reactormonk

+0

我剛剛學習Ruby,並且學習了一些我可以從後面找到Ruby類的例子。 MyClass :: empty()。empty將返回true或false。我不知道爲什麼.empty而不是空的,但是這不僅僅是該方法是否返回某些內容或者是否訪問其屬性的問題? – antonpug

+0

什麼類型會empty()返回? –

回答

2

你會在裏面寫什麼?你想要它做什麼?

您將有一個名爲empty的類方法,該方法返回一個具有empty方法的方法,該方法(a)不帶參數或(b)讓它們默認。

class MyClass 
    def self.empty 
    return WithEmpty.new # Or existing WithEmpty 
    end 
end 

它還需要返回一些有add方法的東西,並返回它自己。

class WithEmpty 
    def initialize 
    @a_list = [] 
    end 

    def add x 
    @a_list << x 
    self 
    end 

    def empty 
    @a_list.empty? 
    end 
end 

如果你描述了你正在做的事情,它會更容易/更快。這並不明顯。

pry(main)> MyClass::empty() 
=> #<WithEmpty:0xa01a090 @a_list=[]> 
pry(main)> MyClass::empty().empty 
=> true 
pry(main)> MyClass::empty.empty 
=> true 
pry(main)> MyClass::empty.add("hi").add("bye") 
=> #<WithEmpty:0x9fc8d1c @a_list=["hi", "bye"]> 

現在,你有沒有直接的辦法讓「內部」類的列表中,除非你在任一MyClass保存它(粗略的,因爲該方法是類,而不是實例方法),或您保存返回來自最後一串鏈接方法的值。

但是,如果您保存該實例,那麼通過MyClass來做什麼呢?再次,我忍不住想你需要確定你實際想要完成的事情,而不是專注於如何實現它。目標是什麼?


首先,有一個陣列沒有「添加」方法。你描述,到目前爲止,還沒有什麼意義,除非你的意思是這樣:

class MyClass 
    def self.empty 
    return MyClass.new 
    end 

    def initialize 
    @arr = [] 
    end 

    def empty 
    @arr.empty? 
    end 

    def add x 
    @arr << x 
    self 
    end 
end 

然後:

pry(main)> MyClass.empty 
=> #<MyClass:0x9aea390 @arr=[]> 
pry(main)> MyClass.empty.add("ohai").add("kthxbai") 
=> #<MyClass:0x99f505c @arr=["ohai", "kthxbai"]> 

但再次:你是混合類和實例方法的方式我不覺得有意思。你想如何訪問數組? MyClass是什麼意思?爲什麼不使用數組?

pry(main)> a = [] 
=> [] 
pry(main)> a.empty? 
=> true 
pry(main)> a << "ohai" << "kthxbai" 
=> ["ohai", "kthxbai"] 
pry(main)> 
pry(main)> a.empty? 
=> false 

沒有什麼MyClass的目的是,告訴你實現它一個合理的方式任何指引是很難的,因爲沒有上下文,你已經證明不使一個很大的意義是什麼。

+0

1.什麼是WithEmpty?我有一個數組,我想檢查它是否爲空,我不認爲這會檢查它? 2.這裏我想要做的是將項目添加到數組。我回顧了幾年前的一些老類,並由於某些原因使用了:: empty()。add(---)。add(---)。add(---)格式。 – antonpug

+0

您通過調用'empty?'來檢查數組是否爲空。查看更新。 –

+0

是的。而且我並沒有真正想要學習Ruby的「目標」。從我上課的時候開始,學習了一些非常古老的例子。 – antonpug