Ruby on rails Ruby';s位移位运算符“<<&引用;与数组连用时的混淆
我正在学习Ruby,但我想不出这一点。我有一个练习,我必须在包含游戏的库类中添加一个方法。每个游戏都是一个类游戏的实例。因此,解决方案如下:Ruby on rails Ruby';s位移位运算符“<<&引用;与数组连用时的混淆,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在学习Ruby,但我想不出这一点。我有一个练习,我必须在包含游戏的库类中添加一个方法。每个游戏都是一个类游戏的实例。因此,解决方案如下: class Library attr_accessor :games def initialize(games) self.games = games end def has_game?(search_game) for game in games return true if game == search_
class Library
attr_accessor :games
def initialize(games)
self.games = games
end
def has_game?(search_game)
for game in games
return true if game == search_game
end
false
end
def add_game(game)
@games << game
end
end
类库
属性访问器:游戏
def初始化(游戏)
self.games=游戏
结束
def有游戏?(搜索游戏)
游戏中的游戏
如果游戏==搜索游戏,则返回true
结束
假的
结束
def添加_游戏(游戏)
@games看起来@games
是一个数组。数组的shift运算符将一个元素添加到数组的末尾,类似于array\push
ary它不是按位左移,而是“铲”运算符。您可能知道,在Ruby中,操作符是作为方法实现的,即当您编写
1 + 1
实际情况是:
1.+(1)
当您有以下情况时,“电铲”()也是如此:
@games << game
我希望@games
是类Array
Array
的实例方法。例如:
@games = [1,2,3]
@games.class #=> [1,2,3].class => Array
@games << 4 #=> [1,2,3,4]
@games.<<(5) #=> [1,2,3,4,5]
@games = 7
@games.class #=> 7.class => Fixnum
在二进制文件中,如下所示:
@games.to_s(2) #=> "111"
然后:
然后:
在receiver
的类中查找实例方法method
的文档。例如,如果您搜索“ruby array”,第一个命中的可能是类array的文档,我猜游戏
是某种
@games = [1,2,3]
@games.class #=> [1,2,3].class => Array
@games << 4 #=> [1,2,3,4]
@games.<<(5) #=> [1,2,3,4,5]
@games = 7
@games.class #=> 7.class => Fixnum
@games.to_s(2) #=> "111"
@games << 2 #=> 28
28.to_s(2) #=> "11100"
@games = { :a => 1 }
@games.class #=> { :a => 1 }.class => Hash
@games << { :b => 2 }
#=> NoMethodError: undefined method `<<' for {:a=>1}:Hash
@games = [1,2,3]
@games << 4 #=> [1,2,3,4]
@games.send(:<<, 4) #=> [1, 2, 3, 4]
receiver.method(*args)