Skip to content

Instantly share code, notes, and snippets.

View pasberth's full-sized avatar

pasberth pasberth

View GitHub Profile
@pasberth
pasberth / ptr.rb
Created October 5, 2011 04:48
代入しても常に同じオブジェクトを参照したい
# -*- coding: utf-8 -*-
class Pointer < BasicObject
def initialize value
@value = value
end
def __value__
@value
end
@pasberth
pasberth / shapelang.rb
Created October 8, 2011 08:03
テトリスの図形などの設定記述のための言語
# 文字列から、' ' を除くすべての文字をtrue、 ' ' のみを false に置き換えた二次元配列を作ります。
# コメントは '__' から始めます。そのあとから行末までのすべての文字は無視されます
# テトリスとかの図形を作る時に使います
module ShapeLang
extend self
# *** //
# * * //
# *** //
# to
@pasberth
pasberth / curryargs.py
Created October 18, 2011 07:19
カリー化で可変長引数っぽい事
def curryargs(arg=None, args=()):
def _ca(next=None):
return curryargs(next, args + (arg,))
if arg:
return _ca
else:
return args
def printargs(args):
for arg in args:
@pasberth
pasberth / __init__.py
Created October 18, 2011 13:42
(3, 2, 1) + (4, 3, 2) = (7, 5, 3) になるような Point クラス
# -*- coding: utf-8 -*-
class Point:
def __init__(self, *vectors):
self.vectors = vectors
def __str__(self):
return str(self.vectors)
def __iter__(self):
return self.vectors.__iter__()
@pasberth
pasberth / funcname.rb
Created November 3, 2011 15:06
実行時に動的に関数名を得る
module Kernel
def funcname
caller[0] =~ /^.*?\:in `(.*?)'$/
$1.to_sym
end
end
if __FILE__ == $PROGRAM_NAME
@pasberth
pasberth / i_get_princess_mana.rb
Created November 5, 2011 07:20
プログラミング言語で詩っぽいこと
# -*- coding: utf-8 -*-
I = [:princess_mana]
def I.get num
at num
end
PRINCESS_MANA = 0
I.get PRINCESS_MANA # I.first は常にprincess_manaを返さねばなりません。I.first は常にprincess_manaにより予約されています
@pasberth
pasberth / catch.rb
Created November 5, 2011 13:55
例外を細くしたりする感じの
module Kernel
def _throw e=RuntimeError, *args, &blk
if e.kind_of? Exception
$! = e
$@ = caller
throw :exception
else
$! = e.new *args, &blk
$@ = caller
@pasberth
pasberth / もしかして.rb
Created November 6, 2011 02:36
こういう定義すればいいのでは!?!?!?
# -*- coding: utf-8 -*-
module Kernel
alias m_original_method_missing method_missing
def method_missing funcname, *args, &blk
if funcname.to_s =~ /^(.*?)nnn(.*?)$/
m_funcname = "#{$1}nn#{$2}"
puts "もしかして: #{m_funcname}"
puts caller
@pasberth
pasberth / typofixer.rb
Created November 6, 2011 03:10
typoを検出するッ
# -*- coding: utf-8 -*-
module Kernel
alias typofixer_original_method_missing method_missing
def method_missing funcname, *args, &blk
at = caller
begin
typofixer_original_method_missing funcname, *args, &blk
rescue NoMethodError, NameError => e
@pasberth
pasberth / propertible.rb
Created November 8, 2011 06:22
プロパティをセットしたりするモジュール
module Propertible
alias propertible_original_method_missing method_missing
def method_missing funcname, *args, &blk
propertible_original_method_missing funcname, *args, &blk
rescue => e
if funcname.to_s =~ /^(.*)\=$/
self.class.send :attr_writer, $1
send :"#{$1}=", args[0]