問題タブ [ruby]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
885 参照

c# - 動的言語でビジターパターンを実装するための好ましい方法は?

自分の練習問題として、サンプルプログラムをさまざまな言語に翻訳していました。C#から始めて、次のようなビジターパターンインターフェイスがありました。

ruby(またはpythonなど)に移行すると、型に基づいてコンパイラーからディスパッチを取得しなくなりました。訪問者自身で派遣する必要がありますか?

または、部屋のさまざまな専門分野で派遣を行う必要があります。

または、動的言語で使用される別の好ましいイディオムはありますか?

0 投票する
1 に答える
1517 参照

ruby-on-rails - コンソールから Rails ログインをテストするにはどうすればよいですか?

Rails の応答オブジェクトを使用してログインおよびログアウトする方法を理解するのにかなりの時間を費やしていました。標準のブログは大丈夫でしたが、最終的に診断したので、ここに記録したいと思いました。

上記は、認証リクエストが失敗した後にリダイレクトすること、およびログイン後にリダイレクトすることを意味することに注意してください。

フィクスチャをテスト環境の DB に確実にロードするには (通常は rake テスト中に発生します)、以下を実行してください。

(Patrick Richie より) デフォルトの URL は 'www.example.com' のように見えます。このデフォルトのホストは ActionController::Integration::Session で設定されているためです。

actionpack/lib/action_controller/integration.rb#75 に設定されています

統合テストでこれを変更するには、次の手順を実行します。

0 投票する
3 に答える
10006 参照

ruby - Ruby のセッターに「self」が必要な理由 クラス内の資格?

Ruby のセッターは、作成されたか手動で作成されたかにかかわらず、クラス自体内でアクセスするときに修飾(c)attr_accessorが必要な唯一のメソッドのようです。self.これにより、Ruby だけが言語の世界に置かれているようです。

  • すべてのメソッドにはself/が必要ですthis(Perl のように、Javascript だと思います)
  • メソッドは必要ありませんself/ありませんthis(C#、Java)
  • セッターだけがself/ this(Ruby?)を必要とします

最適な比較は C# と Ruby です。どちらの言語も、クラス インスタンス変数のように構文的に機能するアクセサ メソッドをサポートしているためです: foo.x = y, y = foo.x. C# はそれらをプロパティと呼びます。

簡単な例を次に示します。Ruby と C# の同じプログラム:

を取り除くself.qwerty =()と失敗します (Linux および OS X では Ruby 1.8.6)。今C#:

質問: これは本当ですか? セッター以外に self が必要な場面はありますか? つまり、Ruby メソッドをselfなしでは呼び出せない場合は他にありますか?

確かにself必要になるケースは多いです。明確にするために、これは Ruby に固有のものではありません。

同じあいまいさは同じ方法で解決されます。しかし、微妙な間、私はケースについて尋ねています

  • メソッド定義されており、かつ
  • ローカル変数が定義されていない。

私たちが遭遇する

これはメソッドの呼び出しですか、それとも新しいローカル変数の割り当てですか?


@マイク・ストーン

やあ!私はあなたが指摘した点を理解し、感謝しています。あなたの例は素晴らしかったです。私が十分な評判があれば、あなたの回答に賛成票を投じるだろうと私が言うとき、私を信じてください. それでも、私たちはまだ同意しません:

  • セマンティクスの問題について、および
  • 事実の中心点に

まず、皮肉なことに、「あいまいさ」の意味について意味論的な議論が行われていると主張します。

言語のセマンティクス (この質問の主題) の解析とプログラミングに関して言えば、「あいまいさ」という概念の幅広い範囲を認めるでしょう。ランダムな表記法を採用しましょう。

  1. ambiguous: 字句のあいまいさ (lex は「先読み」する必要があります)
  2. あいまい: 文法的なあいまいさ (yacc は解析ツリー分析を延期する必要があります)
  3. AMBIGUOUS: 実行の瞬間にすべてを知っているあいまいさ

(そして、2〜3の間にジャンクもあります)。これらのカテゴリはすべて、コンテキスト情報をさらに収集し、よりグローバルに調査することで解決されます。だからあなたが言うとき、

「qwerty = 4」は、変数が定義されていない場合、C# では UNAMBIGUOUS です...

私はこれ以上同意できませんでした。しかし、同じ理由で、私は言っています

「qwerty = 4」はRubyで明確です(現在存在するため)

"qwerty = 4" は C# ではあいまいです

そして、私たちはまだ互いに矛盾していません。最後に、ここで私たちは本当に同意しません: ruby​​ は、次のような追加の言語構造なしでは実装できるかできないかのどちらかです。


「qwerty = 4」の場合、ローカル変数が定義されていない場合、ruby UNAMBIGUOUSLY は既存のセッターを呼び出します。

あなたはノーと言います。はいと言います。「 qwerty = 4」は、セッターもローカルも存在しない場合に新しい変数定義し、存在する場合はセッターを呼び出し、存在する場合はローカルに割り当てます。私は自分が間違っている可能性があることを完全に受け入れます。実際、私が間違っているかもしれない理由は興味深いでしょう。

説明させてください。

インスタンス変数 (ruby や C# など) のように見えるアクセサ メソッドを使用して、新しいオブジェクト指向言語を作成していると想像してください。おそらく、次のような概念文法から始めるでしょう。

しかし、すべての入力が理解された後でも、どの文法が適切であるかを知る方法がないため、パーサー コンパイラ (ランタイムでさえも) は吐き出します。あなたは古典的な選択に直面しています。詳細はわかりませんが、基本的にRubyはこれを行います:

それがあいまいでない理由です.一方、C#はこれを行います:

C# の場合、「後で」はまだコンパイル時です。

ルビーでも同じことができると確信していますが、「後で」は実行時に行う必要があります。なぜなら、ベンが指摘しているように、ステートメントが実行されるまでどのケースが適用されるかわからないからです。

私の質問は、「『自分』が本当に必要なのか?」という意味では決してありませんでした。または「回避されている潜在的なあいまいさは何ですか?」むしろ、なぜこの特定の選択がなされたのか知りたかったのですか? 多分それはパフォーマンスではありません。たぶん、仕事が終わっただけか、1ライナーローカルがメソッドをオーバーライドできるようにするのが最善と考えられていました(かなりまれなケースの要件です)...

しかし、私は、最も動的な言語は、この決定を最も長く延期し、最もコンテキスト情報に基づいてセマンティクスを選択する言語である可能性があることを示唆しています。したがって、ローカルがなく、セッターを定義した場合、セッターが使用されます. メソッドの呼び出しは実行時に決定され、表現力が最大限に発揮されるからです。

0 投票する
3 に答える
1011 参照

ruby-on-rails - Rails に機能を追加する

私はRailsアプリに取り組んでおり、私が尋ねた「Ruby on Railsでホスト名またはIPを取得する」からいくつかの機能を含めようとしています。

私はそれを機能させるのに問題があります。libディレクトリにファイルを作成するだけでよいという印象を受けていたので、内容を「get_ip.rb」と名付けました。

また、GetIP をクラスとして定義しようとしましたが、通常の方法を実行すると、メソッドをまったくruby script/console使用できません。local_ip何か案は?

0 投票する
3 に答える
937 参照

ruby-on-rails - Ruby on Rails アプリケーションから Flex チャートにデータを渡す最良の方法は何ですか?

Rails アプリケーションから Flex バイナリにデータを渡す方法は多数あります。現在、xml.erb テンプレートで古い e4x resultFormat を使用しています。以前に AMF を実行したことがありますが、ブラウザーが swf バイナリをロードし、バイナリが Web 要求を行うのを待つ必要がないため、埋め込み自体にパラメーターをインライン化する方が良い解決策だと思います。

これらすべてを考慮して、最近の Rails バックエンドで Flex ウィジェットをレンダリングするためのベスト プラクティスは何ですか?

0 投票する
9 に答える
38476 参照

ruby-on-rails - 最高の Ruby on Rails ソーシャル ネットワーキング フレームワーク

Ruby on Railsを使ってSNS+MP3講義のダウンロード・閲覧・コメント・発見サイトを作ろうと思っています。一部は楽しみのためであり、Ruby on Rails を学ぶための手段としても使用されます。サイトの基礎として使用できるソーシャル ネットワーキング フレームワークを探しています。車輪の再発明はしたくありません。

Web を検索すると、そのようなフレームワークが 3 つ見つかりました。これら3つのうちどれを使用することをお勧めしますか?またその理由は?

http://portal.insoshi.com/

http://www.communityengine.org/

http://lovdbyless.com/

0 投票する
3 に答える
2914 参照

ruby - ruby メソッド名

Ruby で作業しているプロジェクトでは、method_missing メソッドをオーバーライドして、ActiveRecord オブジェクトで変数を設定するのと同様に、このようなメソッド呼び出しを使用して変数を設定できるようにしています。

Object.variable_name= 'new value'

しかし、これを実装した後、多くの変数名にピリオド (.) が含まれていることがわかりました。私はこの回避策を見つけました:

Object.send('variable.name=', 'new value')

しかし、使用できるように期間をエスケープする方法があるのではないかと思っています

Object.variable.name= 'new value'

0 投票する
8 に答える
93768 参照

ruby - Ruby での安全な整数解析

たとえば、文字列があり、'123'それを整数に変換したいと考えてい123ます。

単純に を実行できることはわかっていますが、それはsome_string.to_iに変換'lolipops'0れます。これは、私が考えている効果ではありません。無効なものを変換しようとすると、素敵で痛いException. 0そうしないと、有効な数値と数値ではない数値を区別できません。

編集:正規表現のトリックなしで、標準的な方法を探していました。

0 投票する
3 に答える
52884 参照

ruby - Rubyでの例外の発生と例外のスローの違いは何ですか?

Ruby には、Throw/Catch と Raise/Rescue という 2 つの異なる例外メカニズムがあります。

なぜ2つあるのですか?

一方を使用し、もう一方を使用しないのはいつですか?

0 投票する
2 に答える
2024 参照

ruby-on-rails - Rails 2.1.xでRoutingErrorを処理する最良の方法は?

私はRails 2.1のrouting.rbコードで遊んでいて、適切なパスが見つからない場合にスローされるRoutingError例外で何か役に立つことができるところまで到達しようとしています。

/azenv.php ボット攻撃、URL に /bar/foo/baz を入力する人など、単純に悪い URL のクラスがあるため、これはややトリッキーな問題です。それ。

次に、微妙なルーティングの問題があります。たとえば、/artists/ や /// など、通知を受け取りたい場所です。このような状況では、エラーをスローしたい場合と、スローしたくない場合があります... または、以前は有効だったが削除されたために無効になった URL を Google から送信してもらうことがあります。

これらの状況のそれぞれで、返されるパスを格納、分析、フィルタリングする方法、または少なくとも通常の「フォールバック キャッチオール」URL を通過するルーティングを管理する Railsy の方法が必要です。これは存在しますか?

編集:

したがって、ここのコードは次のとおりです。

したがって、最良のオプションは、例外に従って例外をフィルタリングできるように、log_error(exception) をオーバーライドすることです。だからApplicationControllerで

別のコントローラーロジック、ルートなどが必要な追加ロジックのソルト。