【问题标题】:Currying a varargs proc and getting another varargs proc in rubyCurrying varargs proc 并在 ruby​​ 中获取另一个 varargs proc
【发布时间】:2016-01-02 23:53:25
【问题描述】:

这在 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 似乎无法返回可变参数 fn。

当然可以

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

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

【问题讨论】:

  • 请陈述问题,以便那些熟悉 Ruby 但不熟悉 Closure 的人能够理解。 “varargs fn”是指带有可变数量参数的咖喱过程吗?对于您的示例,您希望 proc 在调用时返回什么?
  • 数字不定,是的。 Varargs 是一个中性语言术语。

标签: ruby clojure currying


【解决方案1】:

试试这个:

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

在 ruby​​ 中,裸括号仅用于调用方法。要调用 procs,您需要执行 .call()[].()

【讨论】:

  • 三种方式?五种方式! f = ->s { puts "Say #{s}!" }; f.yield("hey") #=> "Say hey!"; f === "hey" #=> "Say hey!".
  • 这并不能真正解决问题。
  • 也许我理解错了?但这会使您原始帖子中的代码工作
猜你喜欢
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多