【问题标题】:Is there a possible way to check for second parentheses in a function?有没有一种可能的方法来检查函数中的第二个括号?
【发布时间】:2020-06-06 06:01:42
【问题描述】:

我正在处理一个 Javascript 挑战。挑战在于下面的代码,您可以在其中将提供的数字相加:

function addTogether() {
//I left this blank because I'm focused on checking for the second parentheses
}

但是,如果您尝试将这个addTogether(5)(7) 传递给function addTogether(),则很难得到第二个括号。

但是,如果您编写此代码,则可以得到两个括号:

function addTogether() {
  //get first parenteses
  let first = arguments;
  //get second parentheses
  let second = function() {
    return arguments;
  };
}

但我的问题是如何检查是否有第二个括号?因为我正在传递其他数据,例如addTogether(2,3)。换句话说,我可能会将一些带一个括号和另一个带两个括号的传递给function addTogether()

【问题讨论】:

  • 除非您将参数作为字符串传递,否则您不能这样做,因为 javascript 不提供宏支持。

标签: javascript function arguments


【解决方案1】:

没有办法检查,除非你正在解析源代码,但你的函数可以选择接受第二个参数,如果提供它返回总和,否则返回一个函数

const addTogether = (a, opt) => opt ? a + opt : b => a + b

console.log("addTogether(1,3) => ", addTogether(1,3))

console.log("addTogether(4)(6) => ", addTogether(4)(6))

【讨论】:

    【解决方案2】:

    使用强制数字的函数的简单实现。
    使用 reduce 计算总和。覆盖 @@toPrimitive 以创建强制添加值的函数。递归调用以生成可递归链接的可调用数字强制函数。

    如果您想进一步自定义行为,请查看ECMAScript specs。您需要了解转化路径。

    function sum(...args) {
      const first = args.reduce((sum,x)=>sum+x,0)
    
      const second = function(...args) {return sum(first, ...args)}
      second[Symbol.toPrimitive] = function(){return first}
      return second
    }
    console.log(
    1+sum(1)(2)+sum(1)+sum(3),
    sum(1,1,2) (1,3)(0)(0)+sum(0,-1,1,0),
    sum(1)(1)(2)(1)(3)(0)(0)(-1,1)(0)+sum()
    )

    【讨论】:

      猜你喜欢
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多