Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 可以去掉类变量吗?_Ruby - Fatal编程技术网

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方法
,您可能走错了方向。(我完全同意你的看法,我只是在玩弄文字游戏。)