-2

fileメソッドのパラメータsoundを単一引用符を使用して .fifo > 拡張子のファイル名にするにはどうすればよいですか? 私はいろいろと調べ、さまざまなアプローチを試みてきましたが、これについては新しい視点が必要だと思います。

defサウンド(ファイル) @cli.stream_audio('audio\file.fifo') end

よし、ようやく機能するようになりました。正しい方法ではないかもしれませんが、これでうまくいったようです。まず、ファイル パラメータに干渉する空白があった可能性があります。次に、いくつかの異なる人々によってここに投稿された File.join オプションを使用しました。

私は実際に各回答を少し使用しましたが、これが結果の出方です。

    def sound(file)
    file = file.strip
    file = File.join('audio/',"#{file}.fifo")
    @cli.stream_audio(file) if File.exist? file
    end

魔法のように動作します!:D

4

2 に答える 2

1

問題は、ファイル パスの区切り記号の使用にあります。を使用してい\ます。これは大したことではないように思えるかもしれませんが、Ruby 文字列で使用する場合は実際にそうです。

一重引用符で囲まれた文字列で使用する\と、何も起こりません。そのまま評価されます。

puts 'Hello\tWorld' #=> Hello\tWorld

二重引用符を使用するとどうなるかに注意してください。

puts "Hello\tWorld" #=> "Hello    World"

\tタブとして解釈されました。これは、Ruby が二重引用符内のコードを補間するのと同じように、新しい行またはタブにorを#{}解釈するためです。なので、実際に見ると とで見えます。次に、それが「フォーム フィード」を意味すると判断し、それを文字列に追加します。エスケープ シーケンスの一覧を次に示します。これは C++ 用ですが、ほとんどの言語で動作します。\n\t"audio\file.fifo""audio"\f"ile.fifo"\f

@sawa が指摘したように、エスケープ シーケンスが存在しない場合 (たとえば、\y) は削除され\、「y」が残ります。

"audio\yourfile.fifo" #=> audioyourfile.fifo

次の 3 つの解決策が考えられます。

  1. スラッシュを使用します。

    "audio/#{file}.fifo"
    

    スラッシュは、システムに渡されるときにファイル パスの区切り記号として解釈されます。私はほとんどの作業を Windows で行っています\/、コードでの使用はまったく問題ありません。

  2. 使用\\:

    "audio\\#{file}.fifo"
    

    ダブル\\エスケープを使用する\と、意図したとおりに読み取られます。

  3. 使用File.join:

    File.join("audio", "#{file}.fifo")
    

    File::SEPARATORこれにより、定数のように設定されているファイルセパレーターを使用してパラメーターが出力されます。

于 2013-07-17T15:18:14.423 に答える