Ruby 为什么可以';变量名不能以“?”结尾,而方法名可以?

Ruby 为什么可以';变量名不能以“?”结尾,而方法名可以?,ruby,Ruby,方法名称可以以问号结尾? def has_completed? return count > 10 end 但是变量名不能 原因是什么?让变量名也以同样的方式结束不是很方便吗?鉴于我们通常无法仅通过查看名称foobar来判断foobar是一个方法还是一个变量,为什么会出现?的例外情况 我该如何处理这个问题?可能总是在代码中使用has或is if process_has_completed ... end if user_is_using_console ... end 你

方法名称可以以问号结尾

def has_completed?
  return count > 10
end
但是变量名不能

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

我该如何处理这个问题?可能总是在代码中使用
has
is

if process_has_completed
  ...
end

if user_is_using_console
  ...
end

你必须让Matz得到一个权威的答案。但是,

  • Ruby是一种非类型的编程语言,像
    finished?
    这样的变量意味着一种特定的类型(布尔型),这在我看来有些矛盾
  • 一个问题需要一个接受者(他能回答这个问题)。一个方法必须有一个接收者(调用该方法的对象),所以问号是有意义的。另一方面,变量没有接收器,它只是一个容器

你必须让Matz得到一个权威的答案。但是,

  • Ruby是一种非类型的编程语言,像
    finished?
    这样的变量意味着一种特定的类型(布尔型),这在我看来有些矛盾
  • 一个问题需要一个接受者(他能回答这个问题)。一个方法必须有一个接收者(调用该方法的对象),所以问号是有意义的。另一方面,变量没有接收器,它只是一个容器

现在这只是一个想法,但我认为名为
empty?
的方法建议必须在对象或类内部进行某种检查(取决于上下文)。这种检查或评估意味着必须采取行动。总的来说,由于我们要求(因此,
)对象具有某种状态,这意味着对象的状态有可能在应用程序的整个生命周期中发生变化。变量可能已过时,但
-方法(检查)将在特定时刻完成,从而提供有关某些状态的最新信息,这些信息可能以布尔形式呈现


因此,我认为这是架构师(Matz)提供的设计约束,以实施更符合逻辑、更接近现实生活的编码方法。

现在这只是一个想法,但我认为名称为
empty?
的方法建议必须在对象或类内部进行某种检查(取决于上下文)。这种检查或评估意味着必须采取行动。总的来说,由于我们要求(因此,
)对象具有某种状态,这意味着对象的状态有可能在应用程序的整个生命周期中发生变化。变量可能已过时,但
-方法(检查)将在特定时刻完成,从而提供有关某些状态的最新信息,这些信息可能以布尔形式呈现


因此,我认为这是架构师(Matz)提供的一个设计约束,用于实施更具逻辑性、更接近现实生活的编码方法。

那么这不适用于方法和变量名吗?另外,我认为暗示没有什么错,例如,如果我们不使用
,我们可能会使用其他东西。。。也暗示着。拥有
只是一个使用方便的符号。变量拥有一个特定的值,而单个方法可以返回不同类型的值,这是有区别的。但是,从语义的角度来看:方法是发送给对象的消息,因此您可以告诉对象做某事或要求它提供值(因此使用问号)。变量只是持有一个特定的值。语义理论的另一个论点是带感叹号的方法。使用
的方法可以被视为向对象发出的问题和命令。这并不能使sanse成为变量。“你必须让Matz得到一个权威性的答案。”除非有人已经在Ruby邮件列表中询问过……我真的不相信这种推理,或者至少它在Ruby中是有意义的,因为它存在于今天。仅仅因为Ruby是非类型化的,并不意味着名称不应该暗示类型。几乎总是相反的。如果一个变量被称为
full\u name
,那么它几乎肯定不是一个浮点数。相比之下,在类型化编程中,当使用泛型时,实际上有时名称不应该暗示类型。接收方的事情也不成立,因为使用getter和setter将方法视为作用域或块中的变量是常见的做法。那么这不适用于方法和变量名吗?另外,我认为暗示没有什么错,例如,如果我们不使用
,我们可能会使用其他东西。。。也暗示着。拥有
只是一个使用方便的符号。变量拥有一个特定的值,而单个方法可以返回不同类型的值,这是有区别的。但是,从语义的角度来看:方法是发送给对象的消息,因此您可以告诉对象做某事或要求它提供值(因此使用问号)。变量只是持有一个特定的值。语义理论的另一个论点是带感叹号的方法。使用
的方法可以被视为向对象发出的问题和命令。这并不能使sanse成为变量。“你必须让Matz得到一个权威性的答案。”除非有人已经在Ruby邮件列表中询问过……我真的不相信这种推理,或者至少它在Ruby中是有意义的,因为它存在于今天。仅仅因为Ruby是非类型化的,并不意味着名称不应该暗示类型。几乎总是相反的。如果一个变量被称为
full\u name
,那么它几乎肯定不是一个浮点数。相比之下,在类型化编程中,没有actu