Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为什么'defined'返回字符串或nil?_Ruby - Fatal编程技术网

Ruby 为什么'defined'返回字符串或nil?

Ruby 为什么'defined'返回字符串或nil?,ruby,Ruby,在ruby中,为什么要定义?返回字符串?大多数其他以?结尾的ruby方法返回布尔值 这是支持功能请求的黑客行为,还是故意滥用ruby约定,为什么 示例: defined?(super) => "super" defined?(nil) => "nil" defined?(Object) => "constant" 正如sawa指出的那样 如果是的话,Ruby源代码文档声明对于以问号结尾的方法是允许的 按约定以问号结尾的方法返回布尔值但它们可能并不总是返回true或fals

在ruby中,
为什么要定义?
返回字符串?大多数其他以
结尾的ruby方法返回布尔值

这是支持功能请求的黑客行为,还是故意滥用ruby约定,为什么

示例:

defined?(super)
=> "super"

defined?(nil)
=> "nil"

defined?(Object)
=> "constant"
正如sawa指出的那样

如果是的话,Ruby源代码文档声明对于以问号结尾的方法是允许的

按约定以问号结尾的方法返回布尔值但它们可能并不总是返回true或false。通常,它们会返回一个对象以指示真实值(或“真实”值)

参考:正如sawa指出的那样

如果是的话,Ruby源代码文档声明对于以问号结尾的方法是允许的

按约定以问号结尾的方法返回布尔值但它们可能并不总是返回true或false。通常,它们会返回一个对象以指示真实值(或“真实”值)


参考:

不,这既不是对Ruby约定的攻击,也不是对Ruby约定的滥用。正如matz在书中所写:

“?”方法。。。返回

  • (a) 真假
  • (b) 非虚假信息值或零
已定义?
属于(b)

此外,正如评论者所指出的,
定义?
不是一种方法。Matz扩展为:

[
定义?
是]一个控制结构。并非所有东西都是Ruby中发送的消息,例如,控制结构、变量、块不是对象<代码>定义?就是其中之一


不,这既不是黑客行为,也不是对Ruby约定的滥用。正如matz在书中所写:

“?”方法。。。返回

  • (a) 真假
  • (b) 非虚假信息值或零
已定义?
属于(b)

此外,正如评论者所指出的,
定义?
不是一种方法。Matz扩展为:

[
定义?
是]一个控制结构。并非所有东西都是Ruby中发送的消息,例如,控制结构、变量、块不是对象<代码>定义?就是其中之一


1. <代码>已定义?不是方法。因此,您对“所有其他ruby方法…”的描述毫无意义。2.使用
返回布尔值的[all]方法不是真的。3.你心目中的“ruby约定”是什么?在你澄清之前,你的问题并不清楚。
后缀约定非常松散,Ruby的正交性并不为人所知。有人可能会说,尾随的
是合理的,因为字符串是真实的,它在正确的时间返回一个假
nil
。或者你可以诚实地说,Ruby的一致性不太好(可能会让粉丝们产生嘘声)<代码>已定义?
不是方法。因此,您对“所有其他ruby方法…”的描述毫无意义。2.使用
返回布尔值的[all]方法不是真的。3.你心目中的“ruby约定”是什么?在你澄清之前,你的问题并不清楚。
后缀约定非常松散,Ruby的正交性并不为人所知。有人可能会说,尾随的
是合理的,因为字符串是真实的,它在正确的时间返回一个假
nil
。或者你可以诚实地说,Ruby的一致性不太好(可能会让粉丝们产生嘘声)。正如我在上面的评论中所写,
定义?
不是一种方法。这是不可能的。如果它是一个方法,当你对照一个未定义的表达式检查它时,就会出现一个错误。所以这个问题的答案实际上是
定义的?
不是一个方法,因此不需要遵循方法惯例。我不同意,@Rots。期望
已定义?
遵循“?”约定是合理的,即使它不是一种方法。但惯例并不是只返回真或假。我同意你的评论,即期待这个@jonahb是合理的——直觉上它返回的是真实的值。我们的答案非常相似,但参考文献不同。正如我在上面的评论中所写,
defined?
不是一种方法。这是不可能的。如果它是一个方法,当你对照一个未定义的表达式检查它时,就会出现一个错误。所以这个问题的答案实际上是
定义的?
不是一个方法,因此不需要遵循方法惯例。我不同意,@Rots。期望
已定义?
遵循“?”约定是合理的,即使它不是一种方法。但惯例并不是只返回真或假。我同意你的评论,即期待这个@jonahb是合理的——直觉上它返回的是真实的值。我们的答案非常相似,参考文献也不尽相同。很好的回答是指出Matz陈述了这个定义?属于方法推理。很好的回答是指出Matz陈述了?属于方法推理。