• 什么叫本质?你自己去试试就知道了。

  • 一种假的 API server ,可以通过一些预先编写的规则生成 REST API ,这个在前后端约定好接口但还没有具体实现时比较有用。你可以找一些对应的类库,或者用 Postman 和 Swagger 等工具来生成,又或者用 Apiary 这种服务。

  • 想先定义和试用 API 的话,找个 mock server ,别这么野路子……

  • 这不是我想表达的重点…… 其实都是两种语言里的不同特性,放一起比较也没什么意义。想了解你可以看看 Elixir 。

  • 只拿 Elixir 举例,我个人是觉得函数式的写法更灵活点,最主要的原因是函数不用绑定 this ,所以数据和行为(函数)可以更自由的组合。这也是跟 OO 最大的差别。代价就是因为每次数据和行为组合都要严格指定,代码必然会更多,所谓的更 explicit ,比如 user.save()Repo.insert(user)

    比如有时会碰到 “一个数据在不同的业务场景下有不同的关注点” ,在 Rails 里就代表一个 model 有多种不同的功能,它们可以用 concern 实现并混入这个 model ,这是一种 mixin 的方式。另一种方式是用 ContextA.do_something(some_model) 的方式来处理,把每个业务场景下的逻辑放在自己的模块里。函数式基本就强制你使用后者了。更复杂的逻辑可能涉及多个函数调用,就可以用 pipe 描述成 params |> ContextA.get_model() |> ContextB.calculate() 这种方式,简化一下函数嵌套。

    为什么说链式调用没有 pipe 灵活?因为 obj.do_something 的前置条件就是这个方法必须归属于调用者对象,有时这是一种限制,导致必须用继承或 mixin 来组织代码以达到复用的目的。所有链式调用都可以写成 pipe 的方式,反过来未必成立。

  • @zzz6519003 @Rei 如果是这样,那确实没有用。反而怎么写都没有 . 简单。从语言层面来说我觉得 Ruby 也没必要关注 “给现有功能多一种表达方法” 的事情,这就不是语言设计者该做的事情。

    @jasl Lisp 据我对 Emacs Lisp 有限的了解,它允许 variable 和 function 用同一个名字,比如变量和方法都叫 foo ,执行再会根据使用场景辨别到底是哪一种。这大概是 Matz 说它们不属于同一个 namespace 的意思。不过这跟 Ruby 有什么关系,以及为什么会影响这个 issue 就不知道了。

  • 语法不管怎么改,含义还是类似 Elixir 的 pipe ,把上一个操作的返回值变成下一个操作的某个参数,让代码组合变得更容易。有些场景下 pipe 比链式调用泛用性更高。链式调用的缺点之一是必须把函数混入进某个 object ,导致 object 承载多个部分的功能然后变得臃肿。

  • 一开始会,后来…………后来你就习惯了

  • 我过去搞的不太值得学习 (Ruby) ,现在搞的更不值得学习 (Elixir) ,放弃的那个最值得学习 (JavaScript)

  • 倒着看就是最值得学习的语言排行榜?