【问题标题】:How can I know the type of argument a method expects?我如何知道方法期望的参数类型?
【发布时间】:2017-04-21 02:23:38
【问题描述】:

我试图理解不是我编写的代码。我如何知道方法期望的参数类型?例如,假设我有一个方法:

def foo(bar)
  @bar = bar
  @baz = get_user(@bar.user)
end

我如何知道我应该将哪个对象发送到 bar?

【问题讨论】:

标签: ruby oop


【解决方案1】:

您无法知道foo 正在等待接收什么样的参数,您只知道在您的示例中该对象必须响应user

这个原则被称为 Duck Typing:对于普通类型,假设适用性仅由对象的类型决定。在鸭子类型中,一个对象的适用性是由某些方法和属性的存在(具有适当的含义)决定的,而不是对象的实际类型。

【讨论】:

  • 那么,如果很多对象属于User,那么,我怎么知道应该接受哪个对象呢? (没有关于 bar 应该接受什么的文档)难道没有一种合乎逻辑的方式来了解这一点吗?编译器怎么知道?
  • 不是语言指定的,你现在依赖代码。我想你也没有规格,对吧?该方法不是在代码的其他地方使用过吗?
  • 是的,它在代码的其他地方使用过。非常感谢!
  • 很高兴为您提供帮助,也许您可​​以接受答案;)
  • 但还是很奇怪,没有逻辑的方法可以知道这一点。不应该仅仅通过阅读就可以理解代码的逻辑吗?如果我无法使用搜索功能怎么办?编译器怎么会知道这个?
猜你喜欢
  • 2013-02-16
  • 2013-01-12
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
相关资源
最近更新 更多