Smalltalk風Ruby
https://twitter.com/technohippy/status/291697606638305280
ã¨ãè¨ããã¨ãã¤ã¶ããã¤ã¤èãããã§ããã","ã«ç®ãçãã°Rubyã¯1.9ãã key:val å½¢å¼ã®Hashãªãã©ã«ããã¼ã¯ã¼ã弿°ã£ã½ã使ãããã->{...} å½¢å¼ã®Procãªãã©ã«ããããã§ãããã£ã¦ãã§ã«ã»ã¼Smalltalkãããªãã§ããã
# Ruby ret = ->{ obj.message 'arg1', arg2:'arg2', arg3:'arg3' }.call
"Smalltalk" ret := [ obj message: 'arg2' arg2: 'arg2' arg3: 'arg3'. ] value.
ã©ã£ã¡ãã©ã£ã¡ãåºå¥ã¤ããªãã¬ãã«ã
ã§ããã®éãªã®ã§è¶³ããªãé¨åãå°ãè£ã£ã¦Rubyããã£ã¨Smalltalkã£ã½ãæ¸ããããã«ã¨ãå°ããªã©ã¤ãã©ãªã使ãã¾ããã
https://github.com/technohippy/smalltalkable
require 'smalltalkable' Object.subclass :Counter, instanceVariableNames: 'value step', classVariableNames: 'instanceCount', poolDictionaries: '', category: 'Category-Name'
ããã使ãã¨ã¯ã©ã¹å®ç¾©ã¯ãããªãµãã«æ¸ãã¾ãã
Counter.compile ' initialize value, step:step @value = value @step = step'
ã¡ã½ããå®ç¾©ã¯ãããªæããæååã§æ¸¡ãã®ãSmalltalkæµãï¼å
counter = Counter.new 0, step:2
ã¡ãã»ã¼ã¸éä¿¡ã¯ããã
String.smalltalkize :rjust => [:rjustWidth, :padding] 'foo'.rjustWidth 10, padding:'*' #=> '*******foo'
ã¡ãªã¿ã«æ¢åã®ã¡ã½ãããSmalltalk風ã«åå®ç¾©ãããã¨ãã§ãã¾ãã
->{counter.value < 20}.while_true ->{ (counter.value % 3 == 0).if_true ->{ puts counter.value } counter.next }
ãã¡ãã if ã while ãSmalltalkã£ã½ãæ¸ãã¾ãã
$ sudo gem install smalltalkable
ã¨ãããã¨ã§ãSmalltalkãæãã¦ãã¾ãªããã©ä»äºã§å·²ãç¡ãRubyã使ã£ã¦ãã人ã¯ãã®Smalltalkableã§å¿ã®å¹³ç©ãåãæ»ãã¦ããã ããã°ã¨æãã¾ãã