如何在ruby中爲可選值建模? Scala有Option [],這是我在Ruby中尋找的東西。是否有與Scala選項等價的紅寶石?
回答
標準庫中沒有等價物。你必須定義你自己的。見this article。
這就是我擔心的。很好地定義你自己的作品,但使用圖書館/ bulitin更容易。謝謝。 – ladrl
你應該不需要它,雖然http://stackoverflow.com/questions/5839697/why-is-the-use-of-maybe-option-not-so-pervasive-in-clojure – OscarRyz
@OscarRyz:我同意這些類型是高階編程的一個關鍵方面,但是在沒有類型的情況下進行高階編程是完全可能的和合理的。類型在這裏不是_mandatory_元素。 Monad在靜態語言和動態語言中都很重要(參見Clojure的minikanren就是一個很好的例子)。選項是一個monad。除了提供更好的類型安全之外,它還有幾個好處,例如減少樣板,同時保證處理所有可能的情況。 [...] – missingfaktor
我不知道斯卡拉,所以我不能斷言你的答案:
在Ruby中,當你調用一個方法,你可以設置了一個param定義的默認值:
def foo(i_am_mandatory, i_am_optionnal = :banga)
puts i_am_optionnal
end
foo(:pouet, :plip)
=> :plip
foo(:pouet)
=> :banga
在該示例中,可以省略具有默認值的i_am_optionnal。
HTH。
這並不完全是'Option' monad的用途。 – missingfaktor
這是風險......謝謝你準確:) – ook
我不是Ruby專家,但我不認爲有相當於Option的選項。由於Ruby是面向對象的,所以沒有什麼能阻止你編寫你自己的實現,但它不如靜態類型語言那樣有用,編譯器強制你對空選項進行適當檢查,使用這種結構的要點。當然還有其他優點,比如可以通過多種方式鏈接選項值。
您是否簽出了Rumonade寶石?它給你一個在Scala上建模的Option類。
require 'rumonade'
[nil, 1, 123].map { |v| Option(v) }
=> [None, #<Rumonade::Some:0x7f2589297768 @value=1>, #<Rumonade::Some:0x7f2589297740 @value=123>]
[nil, 1, 123].map { |v| Option(v).map { |n| n.to_s }.select { |s| s.size > 2 } }.flatten
=> ["123"]
有一個Maybe
類的nkpart的adt libraryexamples/common_adts.rb
下一個例子。還有其他示例ADT,並且該庫可以更容易地定義您自己的。
我剛推了一個名爲nil_be_gone的寶石,它給了你一個可選項,你可以用它來包裝對象。它實現了method_missing來檢查Optional的值是否爲零,如果是則返回另一個可選的被包裝的nil值,否則它調用該對象上的方法並重新包裝它。
nil_be_gone器具bind
作爲and_then
它允許你上可選類型鏈運作,這是其檢索值從可選是值和它封裝在單子的對象被定義self.from_value
單元操作返回的方法。
- 1. rmul是否有紅寶石等價物?
- 2. 什麼是'等'紅寶石的寶石?
- 3. 等價的紅寶石刻面
- 4. 紅寶石openssl中的AES等價物?
- 5. 紅寶石中是否存在PIL等價?
- 6. Vim的紅寶石選項
- 7. 紅寶石等價於C#string.Format
- 8. 報價(紅寶石)
- 9. 紅寶石寶石是否或依賴?
- 10. 是否有任何創建紅寶石工資單的寶石?
- 11. 與紅寶石
- 12. 與紅寶石
- 13. 與紅寶石
- 14. 與紅寶石
- 15. 與紅寶石
- 16. 什麼是蟒蛇BeautifulSoup庫的紅寶石等價物?
- 17. 是否有+ =如果{}在紅寶石
- 18. 驗證是否有使用紅寶石
- 19. 的setInterval()等效紅寶石
- 20. 紅寶石獲取價值
- 21. p0f是否有任何紅寶石寶石包裝?
- 22. 紅寶石項目
- 23. 平等紅寶石vs rspec
- 24. 不等於不紅寶石
- 25. 紅寶石等同於JS
- 26. 紅寶石,等待回調
- 27. 紅寶石陣列平等
- 28. REST與紅寶石?
- 29. 與紅寶石2.1.1
- 30. 紅寶石,與File.new
什麼是可選值? –
Rumonade寶石有一個類似scala的選項用於ruby:https://github.com/ms-ati/rumonade –
你也可以檢查實現Maybe monad的monadic gem,這相當於Scala的Option - https: //github.com/pzol/monadic –