212

私のコードには次のロジックがあります。

if !@players.include?(p.name)
  ...
end

@players配列です。回避できる方法はあり!ますか?

理想的には、このスニペットは次のようになります。

if @players.does_not_include?(p.name)
  ...
end
4

12 に答える 12

411
if @players.exclude?(p.name)
    ...
end

ActiveSupport は、、、およびにexclude?メソッドを追加します。これは純粋な Ruby ではありませんが、多くの ruby​​ist によって使用されています。ArrayHashString

出典: Active Support Core Extensions (Rails ガイド)

于 2012-10-31T09:44:58.203 に答える
106

どうぞ:

unless @players.include?(p.name)
  ...
end

同様の手法の詳細については、Ruby スタイル ガイドを参照してください。

于 2012-04-27T17:55:04.070 に答える
13

以下はどうでしょう。

unless @players.include?(p.name)
  ....
end
于 2012-04-27T17:55:32.773 に答える
7
module Enumerable
  def does_not_include?(item)
    !include?(item)
  end
end

わかりましたが、真剣に、unless は正常に動作します。

于 2012-04-27T17:56:38.360 に答える
3

使用unless:

unless @players.include?(p.name) do
  ...
end
于 2012-04-27T17:55:03.200 に答える
0

unless単一の句を含むステートメントには使用しても問題include?ありませんが、たとえば、ある句に何かが含まれているかどうかを確認する必要がある場合は、 with をArray使用するとはるかに使いやすくなります。include?exclude?

if @players.include? && @spectators.exclude? do
  ....
end

ただし、dizzy42 が上で述べているように、の使用にexclude?は ActiveSupport が必要です。

于 2014-01-27T10:35:36.603 に答える
0

次のようなことを試してください:

@players.include?(p.name) ? false : true
于 2016-07-18T15:45:06.677 に答える