From: Dossy Date: 2002-08-13T00:27:11+09:00 Subject: Re: Ruby Language Q's On 2002.08.12, Justin Johnson wrote: > > yes = "yes" > > no = "no" > > x = nil > > p x.nil? yes: no > > > > Hmm. Not interesting? > > Well, the main thing here is that the '?' and ':' are part of the > accompanying symbols so they would be classed as part of the symbol name. > Ruby already does this for symbols ending in '?'. I don't see what the > problem is. If we were talking about a C/C++ parser then that's a different > matter... Really? That surprises me about Ruby ... lets see: irb(main):014:0> "".size ? true : false true irb(main):013:0> "".size? true : false SyntaxError: compile error (irb):13: parse error "".size? true : false ^ from (irb):13 Okay, I guess you're right. If a method is defined having a trailing '?' then whitespace matters. Totally surprised me. But then, this is funny: irb(main):003:0> 1 ? true : false true irb(main):002:0> 1?true:false true There IS no method #1? defined. Why doesn't the second code snippet also generate a parse error? Interestingly: irb(main):015:0> true? true : false SyntaxError: compile error (irb):15: parse error true? true : false ^ from (irb):15 irb(main):016:0> true?true:false SyntaxError: compile error (irb):16: parse error true?true:false ^ from (irb):16 irb(main):017:0> true ? true : false true I would not have expected the middle code snippet to generate a parse error (given that "1?true:false" doesn't) ... since #true? isn't a defined method, either. This is all using: $ ruby -v ruby 1.6.7 (2002-03-19) [i386-linux] It also happens in Ruby 1.7.2 as well: $ ruby-1.7.2 -v ruby 1.7.2 (2002-05-30) [i686-linux] > Also, 'yes:' would only be valid inside a method argument list and so would > cause a parsing error in this case. Why would it cause a parsing error? Really, it would cause an "ArgumentError: wrong # of arguments(1 for 0)" as #nil?'s arity is 0, but (if the named parameter "foo: bar" was implemented) you would be passing it 1 arg, the object referenced in variable "no" as the "yes" parameter to #nil? which doesn't exist. -- Dossy -- Dossy Shiobara mail: dossy@panoptic.com Panoptic Computer Network web: http://www.panoptic.com/ "He realized the fastest way to change is to laugh at your own folly -- then you can let go and quickly move on." (p. 70)