Project1
标题:
让"Loli"++"Shota"=>"Married" 合法
[打印本页]
作者:
x387804363
时间:
2009-10-4 18:45
标题:
让"Loli"++"Shota"=>"Married" 合法
本帖最后由 x387804363 于 2009-10-5 13:40 编辑
好吧....这是个不常用的脚本,简单的汉化+合体后加了一个无用的小功能,有需要的就拿去吧,介绍在下面,XPVX通用....
#===========================================================
#Superators --- 添加自定义运算符的脚本 & "增强"require,load
#Superators作者:Jay Phillips 版本:0.9.1 for Ruby
#整合:光的圆周率
#Superators 说明:
#用途:在相应的物件类(Object)中添加自己需要的运算符.
#
#格式为:
#class XXX
# superator "++" do |operand|
# .....
# end
#end
#
#使用方法:
#XXX处为物件类(Object)的名称,比如Array或String
#....处为你所需要的功能的实现代码,operand代表运算符后面的参数,
#self代表运算符前面的参数
#
#比如要实现p "1" ++ "2" #=>"12",对应的代码为:
#
#class String
# superator "++" do |operand|
# self + operand
# end
#end
#
#self + operand等效于:return self + operand
#
#※提示:
#1.不可以重载或重写已存在的运算符,比如 + - * / &
#您可以在网络上搜寻已存在的可重写运算符的重写方法,至于有哪些不可以重写,您可以
#自己试试,脚本会告诉你,此问题可能在今后的版本中得到解决.
#
#2.类似于 ++1 ++"a" 1++2 之类的运算符不能够实现.
#
#3.本脚本在RPG Maker VX 1.02 及 RPG Maker XP 1.03环境下测试通过
#
#4.可以直接使用相对路径来调用require,load,使用方法和Ruby相同,加密后会出错
#===========================================================
说明不是很准确,有问题请直接拍出来
原发布地址:
http://rubyforge.org/projects/superators/
完整代码:
#==============================================================================
#Superators --- 添加自定义运算符的脚本 & "增强"require,load
#Superators作者:Jay Phillips 版本:0.9.1 for Ruby
#整理:光的圆周率
#Superators 说明:
#用途:在相应的物件类(Object)中添加自己需要的运算符.
#
#格式为:
#class XXX
# superator "++" do |operand|
# .....
# end
#end
#
#使用方法:
#XXX处为物件类(Object)的名称,比如Array或String
#....处为你所需要的功能的实现代码,operand代表运算符后面的参数,
#self代表运算符前面的参数
#
#比如要实现p "1" ++ "2" #=>"12",对应的代码为:
#
#class String
# superator "++" do |operand|
# self + operand
# end
#end
#
#self + operand等效于:return self + operand
#
#※提示:
#1.不可以重载或重写已存在的运算符,比如 + - * / &
#您可以在网络上搜寻已存在的可重写运算符的重写方法,至于有哪些不可以重写,您可以
#自己试试,脚本会告诉你,此问题可能在今后的版本中得到解决.
#
#2.类似于 ++1 ++"a" 1++2 之类的运算符不能够实现.
#
#3.本脚本在RPG Maker VX 1.02 及 RPG Maker XP 1.03环境下测试通过
#
#4.可以直接使用相对路径来调用require,load,使用方法和Ruby相同,加密后会出错
#==============================================================================
module SuperatorMain
BINARY_RUBY_OPERATORS = %w"** * / % + - << >> & | ^ <=> >= <= < > === == =~"
UNARY_RUBY_OPERATORS = %w"-@ ~@ +@"
BINARY_OPERATOR_PATTERN = BINARY_RUBY_OPERATORS.map { |x| Regexp.escape(x) }.join "|"
UNARY_OPERATOR_PATTERN = UNARY_RUBY_OPERATORS.map { |x| Regexp.escape(x) }.join "|"
UNARY_OPERATOR_PATTERN_WITHOUT_AT_SIGN = UNARY_OPERATOR_PATTERN.map { |x| x.gsub('@', '') }
VALID_SUPERATOR = /^(#{BINARY_OPERATOR_PATTERN})(#{UNARY_OPERATOR_PATTERN_WITHOUT_AT_SIGN})+$/
MAJOR,MINOR,TINY = 0,9,1
VERSION = [MAJOR,MINOR,TINY].join '.'
def superator_send(sup, operand)
if respond_to_superator? sup
__send__ superator_definition_name_for(sup), operand
else
raise NoMethodError, "Superator #{sup} 尚未在#{self.class}中定义"
end
end
def respond_to_superator?(sup)
respond_to? superator_definition_name_for(sup)
end
def defined_superators
methods.grep(/superator_definition_/).map { |m| superator_decode(m) }
end
protected
def superator(operator, &block)
raise ArgumentError, "没有提供块" unless block_given?
raise ArgumentError, "无效的运算符号!" unless superator_valid?(operator)
real_operator = real_operator_from_superator operator
class_eval do
# 再老运算符前执行.
alias_for_real_method = superator_alias_for real_operator
if instance_methods.include?(real_operator) && !respond_to_superator?(operator)
alias_method alias_for_real_method, real_operator
end
define_method superator_definition_name_for(operator), &block
# 我们到方法定义的时候, 我们需要知道是否superator运算符有别名或有新的定义
#
define_method(real_operator) do |operand|
if operand.kind_of?(SuperatorFlag) && operand.superator_queue.any?
sup = operand.superator_queue.unshift(real_operator).join
operand.superator_queue.clear
superator_send(sup, operand)
else
# 如果方法已定义
if respond_to? alias_for_real_method
__send__(alias_for_real_method, operand)
else
raise NoMethodError, "没有在 #{operand.inspect}:#{operand.class}找到方法:#{real_operator} "
end
end
end
end
def undef_superator(sup)
if respond_to_superator?(sup)
real_operator = real_operator_from_superator sup
real_operator_alias = superator_alias_for sup
(class << self; self; end).instance_eval do
undef_method superator_definition_name_for(sup)
if respond_to? real_operator_alias
alias_method real_operator, real_operator_alias if defined_superators.empty?
else
undef_method real_operator
end
end
else
raise NoMethodError, "没有在 #{self.inspect}:#{self.class}中找到 superator #{sup} "
end
end
end
private
def superator_encode(str)
tokenizer = /#{BINARY_OPERATOR_PATTERN}|#{UNARY_OPERATOR_PATTERN_WITHOUT_AT_SIGN}/
str.scan(tokenizer).map { |op| op.split('').map { |s| s[0] }.join "_" }.join "__"
end
def superator_decode(str)
tokens = str.match /^(superator_(definition|alias_for))?((_?\d{2,3})+)((__\d{2,3})+)$/
#输出 *tokens
if tokens
(tokens[3].split("_" ) + tokens[5].split('__')).reject { |x| x.empty? }.map { |s| s.to_i.chr }.join
end
end
def real_operator_from_superator(sup)
sup[/^#{BINARY_OPERATOR_PATTERN}/]
end
def superator_alias_for(name)
"superator_alias_for_#{superator_encode(name)}"
end
def superator_definition_name_for(sup)
"superator_definition_#{superator_encode(sup)}"
end
def superator_valid?(operator)
operator =~ VALID_SUPERATOR
end
end
module SuperatorFlag;end
class Object
include SuperatorMain
attr_reader :superator_queue
def require(file)
Kernel.send(:require,"#{File.dirname(File.expand_path("Game.exe"))}/Data/#{file}")
end
def load(file)
Kernel.send(:load,"#{File.dirname(File.expand_path("Game.exe"))}/Data/#{file}.rb")
end
def -@
extend SuperatorFlag
@superator_queue ||= []
@superator_queue.unshift '-'
self
end
def +@
extend SuperatorFlag
@superator_queue ||= []
@superator_queue.unshift '+'
self
end
def ~@
extend SuperatorFlag
@superator_queue ||= []
@superator_queue.unshift '~'
self
end
end
复制代码
作者:
凌辰
时间:
2009-10-4 20:37
我是来消灭0回复顺便鼓励的- -b
作者:
x387804363
时间:
2009-10-4 21:52
Thanks...这种帖子能消除零回复我已经很高兴了= =a
作者:
DeathKing
时间:
2009-10-6 11:47
我是被标题吸引进来的/lh
作者:
x387804363
时间:
2009-10-6 20:51
欢迎欢迎 = = a
作者:
神思
时间:
2009-10-11 18:15
本帖最后由 神思 于 2009-10-11 18:16 编辑
呵呵学到了样东西``原来还可以前置运算符..
其实他是这样的
a ++ b
拆开来就是
a+(+b)
-__________-||||
作者:
神思
时间:
2009-10-11 18:16
本帖最后由 神思 于 2009-10-11 18:30 编辑
请斑竹消灭本帖-______________-||||
重0.............了
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1