def |(oth)

0 views
Skip to first unread message

Anton Oryol

unread,
Oct 9, 2008, 9:47:04 AM10/9/08
to RubyOnRails to russian
Привет всем!

class Object
def |(oth)
self.blank? ? oth : self
end
end

>> nil | 'test'
=> true

ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux]
Edge rails

Когда это перестало работать и почему?

Anton Dyachuk

unread,
Oct 9, 2008, 11:10:07 AM10/9/08
to ror...@googlegroups.com
В сообщении от Thursday 09 October 2008 17:47:04 Anton Oryol написал(а):
AO> >> nil | 'test'
AO> => true
AO>

Дык вроде всегда же || использовалось не?

>> nil || 'test'
=> "test"


--
With Best Regards, Anton Dyachuk <anton....@gmail.com>

Max Lapshin

unread,
Oct 9, 2008, 11:15:19 AM10/9/08
to ror...@googlegroups.com
Хочется что бы было

"" | "test"
#=> "test"

Я делаю

"".or("test")

Ed Sinjiashvili

unread,
Oct 11, 2008, 12:15:32 PM10/11/08
to ror...@googlegroups.com
2008/10/9 Anton Oryol <eagle...@gmail.com>:
Когда перестало не скажу, а почему - пожалуйста: nil это не экземпляр
Object, а экземпляр (единственный) NilClass.
Поэтому #| надо переопределять у NilClass или у самого nil (а заодно и
у false или FalseClass):

def nil.| obj; obj; end
def false.| obj; obj; end

-- Ed

Anton Oryol

unread,
Oct 12, 2008, 1:15:42 AM10/12/08
to RubyOnRails to russian
> Когда перестало не скажу, а почему - пожалуйста: nil это не экземпляр
> Object, а экземпляр (единственный) NilClass.
> Поэтому #| надо переопределять у NilClass или у самого nil (а заодно и

Но ведь NilClass наследуется от Object. И почему _переопределять_ ,
т.е. метод уже определен?

Ed Sinjiashvili

unread,
Oct 12, 2008, 4:26:47 AM10/12/08
to ror...@googlegroups.com
2008/10/12 Anton Oryol <eagle...@gmail.com>:
Да, NilClass, FalseClass и TrueClass уже имеют свои #|, #& и #^ (ri
NilClass#I), поэтому определение #| уровнем выше (в Object) для них
ничего не меняет.

-- Ed

Anton Oryol

unread,
Oct 12, 2008, 11:51:31 AM10/12/08
to RubyOnRails to russian
> > Но ведь NilClass наследуется от Object. И почему _переопределять_ ,
> >  т.е. метод уже определен?
>
> Да, NilClass, FalseClass и TrueClass уже имеют свои #|, #& и #^ (ri
> NilClass#I), поэтому определение #| уровнем выше (в Object) для них
> ничего не меняет.

Хм.. спасибо. Не знал.
Reply all
Reply to author
Forward
0 new messages