2.2.0 :004 > ':xyz'.split(/:/)[0]
=> ""
2.2.0 :005 > ''.split(/:/)[0]
=> nil
2.2.0 :006 > 'xyz'.split(/:/)[0]
=> "xyz"
2.2.0 :001 > weak_key = lambda {|c| c.split(/:/, 2)[0]}
2.2.0 :002 > weak_key('xyz:1986')
NoMethodError: undefined method `weak_key' for main:Object
2.2.0 :003 > def weak_key(x
(
Read more... )
Comments 27
Reply
Reply
Reply
=> ["1", "2", "", "4", "", "6", "", "", ""]
2.3.0 :023 > '1,2,,4,,6,,,'.split(',')
=> ["1", "2", "", "4", "", "6"]
вот это скорей уже кочка, про которую надо помнить.
Reply
Reply
Reply
Reply
Reply
Reply
2.3.0 :001 > ':xyz'.split /:/
=> ["", "xyz"]
2.3.0 :002 > 'xyz'.split /:/
=> ["xyz"]
2.3.0 :003 > ''.split /:/
=> []
2. тут фокус. помним, что в руби синтаксический диабет - и вот лямбды нельзя вызвать круглыми скобками. да и не надо в коде это обычно.
как можно:
2.3.0 :004 > f = lambda {|x| x+2 }
=> #
2.3.0 :005 > f[2 ( ... )
Reply
2. вот это полезно знать, хотя и wtf, как следствие из зоопарка функций, проков, блоков и лямбд.
3. конечно же, это wtf.
Reply
Reply
подозреваю потому что руби старается не различать переменные и методы
Reply
методы не являются замыканиями.
2.3.0 :007 > def a x
2.3.0 :008?> def b y
2.3.0 :009?> x+y
2.3.0 :010?> end
2.3.0 :011?> b 5
2.3.0 :012?> end
=> :a
2.3.0 :013 > a 3
NameError: undefined local variable or method `x' for main:Object
from (irb):9:in `b'
from (irb):11:in `a'
from (irb):13
from /Users/valt/.rvm/rubies/ruby-2.3.0/bin/irb:11:in `'
2.3.0 :014 >
лямбды, проки, блоки кода - да
Reply
Reply
Reply
я думаю и в смолтолке можно переопределить гарбадж коллектор или поломать текущий колстек, поизмывавшись над ним.
Reply
Leave a comment