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