Ruby 可以去掉类变量吗?
我从 我的目标是尝试一种不寻常但有趣的方法来调用块。我想到了那个密码:Ruby 可以去掉类变量吗?,ruby,Ruby,我从 我的目标是尝试一种不寻常但有趣的方法来调用块。我想到了那个密码: class Chips def self.configure player_class, player_id_method, player_api_method player_class.send :define_method, player_api_method do Chips::Player.new(self.send player_id_method) end end def
class Chips
def self.configure player_class, player_id_method, player_api_method
player_class.send :define_method, player_api_method do
Chips::Player.new(self.send player_id_method)
end
end
def self.fix_game game_id
@@game_results = {game_id: game_id, players: []}
yield
puts @@game_results.inspect
end
class Player
def initialize player_id
@player_id= player_id
end
def gain chips
Chips.send :fix_player, @player_id, chips.abs
end
def lose chips
Chips.send :fix_player, @player_id, -chips.abs
end
end
def self.fix_player player_id, chips
@@game_results[:players]<< {player_id: player_id, chips: chips}
end
private_class_method :fix_player
end
class User
attr_reader :email
def initialize email
@email = email
end
end
Chips.configure User, :email, :chips
p1= User.new 'david@gmail.com'
p2= User.new 'simon@gmail.com'
# p1.chips and p2.chips should have access to the value
# currently accessible by @@game_results reference
Chips.fix_game 3333 do
p1.chips.gain 300
p2.chips.lose 300
end
类芯片
def self.configure player_类、player_id_方法、player_api_方法
player\u class.send:定义\u方法,player\u api\u方法do
芯片::Player.new(self.send Player\u id\u方法)
结束
结束
def self.fix_game_id
@@game_results={game_id:game_id,玩家:[]}
产量
放置@@game_results.inspect
结束
职业选手
def初始化玩家id
@玩家id=玩家id
结束
def增益芯片
Chips.send:fix_player,@player_id,Chips.abs
结束
def丢失芯片
Chips.send:fix_player,@player_id,-Chips.abs
结束
结束
def self.fix_player_id,芯片
@@游戏结果[:players]3333,:players=>[{:player\u id=>”david@gmail.com“,:chips=>300},{:player\u id=>”simon@gmail.com“,:chips=>-300}]}
我希望避免使用类变量
ps
问题创建表单不允许我提交这个问题,直到我添加了更多的单词,这实际上是向强大的看门人祈祷。我给你带来了更多的字节,TMD。我服从 为什么不干脆用state创建一个类呢<代码>芯片。新的。。。等等?顺便说一句,为什么不呢?你能发布一个工作片段吗?不。你的设计非常复杂,我建议你应该从头开始重新设计,然后再试一次。对于这样一个简单的用例,不需要使用元编程。如果您发现自己在使用
send
或define\u方法
,您可能走错了方向。(我完全同意你的看法,我只是在玩弄文字游戏。)