[quote=programuje_na_sedesie]Dziś spotkałem przykład:
puts << 'Hello' << ' World'
Instrukcja z wyglądu przypominała mi std::cout i operator<< ze standardowego libu C++.[/quote]
To chyba nie w tym języku. << to metoda, powyższe jest bezsensu bo nil nie posiada takiej metody. Nie chcem napisać jakieś głupoty, ale w ruby wszystkie operatory to wywołania metod na obiektach. Obiekt musi odpowiadać na daną metode inaczej będzie Exception undefined method.
Powyższe to to samo co
puts nil.send(:<<, 'Hello'.send(:<<, 'World'))
Jeśli sobie zajrzysz w nil to masz:
nil.methods
=> [:to_i, :to_f, :to_s, :to_a, :inspect, :&, :|, :^, :nil?, :to_r, :rationalize, :to_c, :===, :=~, :!~, :eql?, :hash, :<=>, :class, :singleton_class, :clone, :dup, :initialize_dup, :initialize_clone, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :freeze, :frozen?, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, :respond_to_missing?, :extend, :display, :method, :public_method, :define_singleton_method, :__id__, :object_id, :to_enum, :enum_for, :==, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__]