为什么不能用`?`结尾variables名,而方法名可以?

方法名称可以以问号结尾?

 def has_completed? return count > 10 end 

但variables名不能。

这是什么原因? variables名以相同的方式结束是不是很方便? 鉴于我们通常无法分辨foobar是方法还是variables,无论如何只要查看foobar这个名字,为什么? 案件?

我该如何处理这个问题? 也许总是使用has或在代码中?

 if process_has_completed ... end if user_is_using_console ... end 

你不得不问Matz得到一个权威的答案。 然而,

  • Ruby是一种无types的编程语言,并且像variables一样finished? 将意味着一个特定的types(布尔),这似乎有点矛盾的我。
  • 有一个问题需要一个接收者(谁可以回答这个问题)。 一个方法必须有一个接收者(方法被调用的对象),所以问号是有道理的。 另一方面variables没有接收器,它只是一个容器。

现在这只是一个想法,但我认为名字像empty?方法empty? build议某种检查必须在里面和对象或类(取决于上下文)进行。 这项检查或评估意味着必须采取行动。 总体而言,因为我们要求(因此? )对象的某个状态,意味着对象的状态可能在整个应用程序的生命周期中改变。 一个variables可能会过时,但? 方法(check)将在特定时刻完成,从而提供有关可能以布尔forms呈现的某些状态的最新信息。

所以我想认为这是由架构师(Matz)提供的一个devise约束来强化更合乎逻辑的,接近真实的编码方法。