簡體   English   中英

在塊中省略方法的參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM