似乎顶级 HTTP 动词方法(例如Faraday.get
)是通过missing_method
代理到default_connection
ivar 来处理的。 除了有点低效(与典型的网络请求延迟相比,这无疑是一个小问题),它还导致各种工具出现问题:
pry
、 solargraph
等中自动完成。您是否愿意用显式方法定义替换此实现?
嗨@dduugg ,而不是明确定义方法,我会探索一个文档友好的解决方案。
我们也在连接中使用元编程定义: https :
这与您上面提到的要点很相配吗?
如果是这样,我们也可以为Faraday
模块复制一个类似的文档片段。
嗨@iMacTia ,感谢您的回复。 我不认为这个问题可以通过文档解决。 我能麻烦您详细说明一下对明确定义的抵制吗? 我认为这会更好地讨论讨论。 例如,文档方法可能与七个单行显式转发定义一样冗长(计算各种@!method
和@!scope
指令,以及method_missing
代码)我建议Faraday
。 但我不知道这是否是这里的基本原理(代码的阅读量比编写的多得多,所以我认为无论如何优化代码编写者都是错误的)。
主要有 2 点让我对这个变化望而却步。
delegates
只是代码编写者的优势。 我已经使用 Ruby 多年了,和其他人一样,我开始欣赏这种语言的简洁语法。 当我阅读一些代码并发现delegates
我立即知道这意味着什么,它可能会将数十行代码压缩为几行。但与其专注于我对这种变化的抵制,我更愿意讨论我们试图在这里引入什么样的优势。 我完全理解您所描述的问题,我实际上认为我们应该尽可能尝试解决它!
因此,如果这里的主要问题是与代码建议、自动完成和文档的 IDE/工具的兼容性,那么我只是建议寻找替代解决方案,例如文档注释(我们已经非常广泛地使用 YARD)。
当你说这个解决方案同样冗长时,你也是对的,尽管我认为注释不会像方法列表那样影响可读性,而且它很容易识别。
嗨@iMacTia ,感谢您的回复。 我们已切换到具有更好 API 可发现性和工具支持的不同库,但我会分享我的想法,以防您发现它们有用。
def
是可行的方法),但它需要替换method_missing
方法,如前所述。delegates
参数。 Faraday 在处理 HTTP 动词方法时似乎没有使用显式委托。 (在这一点上的困惑可能是一种代码味道,即 HTTP 动词方法的实现过于复杂)。delegate
等对代码编写者的帮助。 我正在与拥有几十年 ruby 集体经验的人一起工作,我们还没有发现这里的方法有任何可读性优势(即使通过 pry、YARD、冰糕和 Solargraph 尝试探索 API 所浪费的时间也打折扣)。 观看 rubyist 第一次探索这个 API 的尝试可能是值得的,至少在这个特定的点上。只是想在这里提供一些诚实(希望有用)的反馈。 我仍然感谢为 OSS 做出的贡献所花费的时间和精力。
嘿,感谢您为法拉第所做的一切努力! 我知道这是一个老问题,但我倾向于同意可发现性是一个问题。 我正在研究一些中间件,并将此部分添加到我的自述文件中。 我的图书馆面向那些以前可能没有使用过法拉第的人,所以我有责任解释一些事情。 我会说(有点犹豫)要弄清楚事情并不容易。
@gurgeous我同意文档绝对是我们可以做得更好的前沿(尽管我们通过启动法拉第网站开始解决这个问题),但我不知道这个问题中的建议将如何解决您的具体问题。
也许我忽略了这一点,因为我只是习惯于以不同的方式工作,但是如果我不知道如何使用库,我就不会依赖自动完成和猜测知道该怎么做。
相反,我检查了库文档,如果这没有帮助,我会深入研究代码以了解它是如何工作的。
因此,为什么我认为改进的文档(可视化或代码中)是解决这个问题的方法。
但也许我在这里遗漏了一些东西,或者一个更好的文档无济于事的特定用例?
我对“可发现性”的理解是否正确?
我对“可发现性”的理解是否正确?
在我的情况下不是。 如果我想深入研究特定方法,我的期望是能够在pry
执行ls Faraday
,然后是$ Faraday.get
等。 我觉得我已经能够使用我使用过的任何其他 gem 有效地做到这一点,很少(如果有的话)需要导航到文档页面,因此打开了这张票。 (这是上面提到的其他问题的补充,例如静态分析工具无法识别使用该库的代码。)
再次感谢您听取我们的意见。
我喜欢法拉第网站! 也许我可以提交 PR 并提供一些建议? 乐于助人。 我认为这种努力对新人来说总是会有回报的。 如果您有兴趣,请告诉我。
就pry
+ ls Faraday
,我也是这种模式的粉丝并广泛使用它。 远离 method_missing 并不是一个坏主意。 随着 Ruby 3、语言服务器、RBS 等的兴起,Ruby 正慢慢朝这个方向发展。不过,我认为这是次要的文档。
@gurgeous我们对文档 Pull Requests 感兴趣,找到带有一组 Gemfile(和 README)的docs/
目录,用于将网站发布到我们正在使用的 GitHub 页面。 如果它的用法不清楚,网站更新过程,请为_that_打开一个问题或一个PR。
感谢法拉第用户的关心!
我喜欢法拉第网站! 也许我可以提交 PR 并提供一些建议? 乐于助人。 我认为这种努力对新人来说总是会有回报的。 如果您有兴趣,请告诉我。
@gurgeous绝对! 我们总是欢迎帮助改进文档或网站,因为对我们维护者来说显而易见的事情对用户来说可能并不那么明显。 另外,我们真的很费时间,这通常会导致文档成本。 实际上,如果不是@olleolleolle继续努力,文档状态会更糟😄!
在pry
点(cc @dduugg)上,我从未使用过它,因此我可能无法理解。
我只是尝试了您的其他详细信息,我注意到ls Faraday::Connection
确实显示了动态生成的方法以及委托的方法🙌。
所以我最初的理解是我们不能使用这些 Ruby“魔法”是错误的,实际上唯一的限制是使用missing_method
。
我不太喜欢的是引入了如下的显式方法:
def self.get(...)
...
end
def self.post(...)
...
end
# ... and so on ...
但是,如果我们可以通过向主Faraday
模块添加动态定义或委托来修复pry
的发现,那么我会接受。 很抱歉第一次没有收到!
不用担心时间限制。 永远不要因为成为开源维护者而感到难过! 无论如何,我们感谢您的努力。 我也去过...
我将开始讨论:文档以确保我们在同一页面上。
@iMacTia用户如何知道查看Faraday::Connection
? 我已经切换到一个带有可发现 API 的 HTTP gem,但我快速浏览了https://lostisland.github.io/faraday/usage/并且没有一个代码示例明确使用它(尽管最后一个这样做了)隐含)。 这些示例主要调用Faraday
上的静态方法,但在 pry 中找不到它们。 我不知道任何其他采用这种方法的 gem,而且我仍然认为这是一种反模式。
一如既往,谢谢你听我说完。