[英]Omitting an argument for a method in a block
我想知道,是否有可能在Ruby中做與在Scala或其他語言中可以做的事情相似的事情:
someCollection.foreach(x => println(x)) // a full version
someCollection.foreach(println) // a short version
在Ruby中,我可以執行以下操作:
some_array.each { |x| puts x }
那我該怎么做呢?
some_array.each { puts }
更新 :
我並不是在特別討論看跌期權,它只是舉例說明。 可能有some_other_method
一個參數 。
some_array.map { some_other_method }
some_array.map(some_other_method) # ???
def some_other_method a
# ... doing something with a
end
如果您在SLS(第6.26.5節)中查找隱式η-expansion的規則,則應該很明顯它非常依賴於靜態類型信息,因此可能無法在Ruby中工作。
但是,您可以通過反射顯式獲取Method
對象。 Method
對象對to_proc
做出響應,因此像對to_proc
做出響應的任何對象一樣,可以使用一元前綴&
運算符將它們作為塊傳遞:
some_array.each(&method(:puts))
不幸的是,並非如此。 您可以發送要在每個對象上調用的方法名稱,例如:
some_array.each &:print_myself
等效於:
some_array.each {|x| x.print_myself}
但是我不知道一種干凈(內置的)方式來完成您所要的事情。 (編輯:@Jörg的答案可以做到這一點,盡管它並沒有真正節省您的任何鍵入操作。Ruby中沒有自動的部分函數應用程序)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.