#1。忽略Curry的第二個參數,並用硬編碼換行
嘗試通過在匿名函數中對其進行硬編碼來緩解cat
的最後一個參數。它實際上並沒有使用Curry
參數後的第一次:
catnip <- Curry(function(...) cat(..., "\n"))
#2。通過討好匿名函數
這裏製造功能是通過使用匿名功能,其進行重新排序cat
的論點咖喱cat
的最後一個參數的第二溶液。
catnip2 <- Curry(function(last.arg, ...) cat(..., last.arg), "\n")
# test
catnip2("hi", "there")
#3。通過克服更基本的功能來製造所需的功能
也許這一切的真正意義在於看看我們如何獲取基本組件並將它們咖喱以獲得我們想要的。因此,我們可以定義一個通用last.arg.fun
,然後通過它的咖喱製造所需的功能:
last.arg.fun <- function(FUN, last.arg, ...) FUN(..., last.arg)
catnip3 <- Curry(last.arg.fun, cat, "\n")
# test
last.arg.fun(cat, "\n", "hi", "there")
# test
catnip3("hi", "there")
我們可以做的兩個步驟,如果我們需要last.arg.cat
在某一點:
last.arg.cat <- Curry(last.arg.fun, cat)
catnip4 <- Curry(last.arg.cat, "\n")
# test
last.arg.cat("\n", "hi", "there")
# test
catnip4("hi", "there")
注意每個測試都應該產生一個表示hi的行,並以換行符結束。
編輯:更多的解決方案。
咖喱貓,yummmy! – John
漂亮的回答所有。我對「do.call」的掌握並不完整,而是在進步。謝謝 :-) –