卷曲varargs proc并在ruby中获得另一个varargs proc

时间:2016-01-02 23:53:25

标签: ruby clojure currying

这在clojure中相当简单 -

(def a (partial println "Hello:"))
(a "Bob")
(a "Bob" "Ganesh")

但这在Ruby中似乎很难。

:puts.to_proc.curry(3)[Kernel, "Hello:"]("Bob")
:puts.to_proc.curry(4)[Kernel, "Hello:"]("Bob", "Ganesh")

Proc#curry似乎无法返回varargs fn。

当然我们可以

class Proc
  def partial(*left)
    Proc.new do |*right|
      self.call *left, *right
    end
  end
end

但我想知道这是否在标准库中。

1 个答案:

答案 0 :(得分:0)

请改为尝试:

:puts.to_proc.curry(3)[Kernel, "Hello:"].("Bob")

在ruby中,裸露的parens只能调用方法。对于调用触发器,您需要执行.call()[].()