ruby - 为什么变量名不能以 `?` 结尾,而方法名可以?

标签 ruby

方法名可以以问号结尾 ?

def has_completed?
  return count > 10
end

但变量名不能。

这是什么原因呢?让变量名也以同样的方式结尾不是很方便吗?鉴于我们通常无法仅通过查看名称 foobar 来判断 foobar 是方法还是变量,为什么 会出现异常?案例?

我应该如何处理它?也许总是在代码中使用 hasis

if process_has_completed
  ...
end

if user_is_using_console
  ...
end

最佳答案

您必须询问 Matz 才能获得权威答案。然而,

  • Ruby 是一种无类型的编程语言,像 finished? 这样的变量将暗示一种特定类型( bool 值),这对我来说似乎有些矛盾。
  • 问题在某种程度上需要接受者(可以回答问题的人)。一个方法必须有一个接收者(方法被调用的对象),所以问号是有意义的。另一方面,变量没有接收者,它只是一个容器。

关于ruby - 为什么变量名不能以 `?` 结尾,而方法名可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5448938/

相关文章:

ruby-on-rails - 结合 ActionCable 和 I18n

ruby-on-rails - Rails Way 处理多条路线上可用的 Action

ruby - Ruby statsample "mode"函数正确吗?

ruby-on-rails - 需要 ActiveRecord 查询来查找具有特定子记录的父项以及其他

ruby-on-rails - 在 Ruby 中初始化类实例变量

ruby - 如何在 Ruby 中创建百分比方法,如 %w 或 %x?

Ruby 的打包和解包解释

ruby - 为什么哈希递归比 lambda 递归快?

ruby - Sublime Text 3 : How to configure rubocop. sublime 设置中的 yml 路径?

ruby - IOCTL 调用中指向缓冲区的指针