0

いくつかの変数をアンパックしようとしていて、def に渡されたときにそれらを結合しようとしていますが、これは私が試みていることですが、エラーです。

class Try
  def test
    @name = "bob"
    @password = "password"
    self.send(@name,@password)
  end

  def send(*data)
    print data #prints orginal data
    print ":".join(data) #errors
  end
end

私が間違っていることはありますか?

4

2 に答える 2

4

ここでは、以下を使用して次のようにする必要がありますArray#join

class Try
        def test
            @name = "bob"
            @password = "password"
            self.send(@name,@password)
        end
        def send(*data)
            print data.join(":")
        end
end
Try.new.test
# >> bob:password

joinArray インスタンス用です。String インスタンス メソッドではありません。下記参照:

Array.instance_methods.include?(:join) # => true
String.instance_methods.include?(:join) # => false
于 2013-09-19T03:27:57.707 に答える
2

joinおそらく、Python 文字列の組み込み関数とjoinRubyArrayクラスのメソッドを混同していると思います。

help(":".join)Pythonから:

iterable 内の文字列を連結した文字列を返します。要素間のセパレータは S です。

そしてRubyのドキュメントArrayから:

配列の各要素を指定されたセパレーターで区切られた文字列に変換して作成された文字列を返します。

ご覧のとおり、Pythonjoin組み込み関数は指定されたリスト引数の文字列を連結しますが、Ruby ではArray#joinメソッドが要素を同等のものに変換しStringてから、区切り引数を使用してそれらを連結します。

joinこれで Pythonと Ruby の混乱が解消されることを願っていますArray#join!

于 2013-09-19T04:04:02.510 に答える