5

私はよく次のようなことをしています。

println(foo)

私がやりたいとき:

println foo

コンパイラはこれを許可しません。

また、println は一口です。本当に言いたいのは次のとおりです。

echo foo

したがって、基本パッケージ オブジェクトで、println のエコー バージョンを作成しました。

def echo(x: Any) = Console.println(x)

十分に簡単で、echo アプリケーションが広く、素晴らしいです。

では、Any をかっこで囲んで印刷する必要なく、echo を呼び出すにはどうすればよいでしょうか。

4

5 に答える 5

11
object ∊ {def cho(s: Any) {println(s)}}

∊cho "Hello world"

あなたの指を救うでしょう。

∊はUnicode Smセットの数学記号であり、Scalaでは演算子としてカウントされるため、これは機能します。したがって、英数字の横にスペースを配置する必要はありません。

あなたもできます

object echo {def -(s: Any) {println(s)}}

echo-"Hello world"

これはIMOでかなりうまく機能します。

数年後の編集:StringContextを使用したもう1つのほぼ解決策:

implicit class PimpMyString(sc: StringContext) {
  def echo(args: Any*) = println(sc.raw(args: _*))
}

echo"Hello World"
于 2012-04-09T12:42:24.007 に答える
5

定義

trait ShortCuts {
  def echo(x: Any) = Console.println(x)
  def trace[T](x: T): T = { echo(x); x }
  // ...
}

object ↬ extends ShortCuts

かっこなしで楽しく使用できます。

↬ echo "hello!"
于 2012-04-09T11:52:45.160 に答える
3

あなたが達成しようとしていることは、Scala では不可能です。

かっこは、いわゆるポイントフリー構文でのみドロップできます。この構文では、関数の左側にコンテキストオブジェクトが必要なので、この場合、次のことしか達成できませんが、とにかく意味がありません:

Console println x

あなたがこれを達成したい理由はわかりますが、おそらく他の言語の単純な構文構成の方が優れていると考えていますが、標準の Scala のやり方に固執することをお勧めします。そのため、println(x)他の言語を使用するか検討してください。このような基本的な標準機能の委任方法を作成すると、将来のプロジェクトの管理に間違いなく問題が生じるだけですecho

そのような場合については、古いことわざがあります。

于 2012-04-09T11:42:47.623 に答える
1

ここでの興味深い一連の応答は、実行できない、実行できる、このシンボル依存のハック、またはこの依存関係 (Scalaz) にまで及びます。

@Nikitaは、printlnの「レッグワーク」を行うスニペットをIDEに簡単に追加できることを正しく指摘しています(それがあなたのロール方法であれば)。それは本当ですが、通常、ctrl-pr、または使用することに決めたキーの組み合わせを実行するには、入力を停止する必要があり、フローが中断されます, IMO. したがって、「より優れた」println を作成するという精神で、これが私の見解です。

サブパッケージ (モデル、ビュー、DAO など) が継承する基本パッケージ オブジェクトを作成します (基本的には独自の PreDef)。

package com
package object company {

  // echo(foo)
  def echo(x: Any) = Console.println(x)

  // foo.echo   
  class AnyProvidesEcho(x: Any) { def echo = Console.println(x) }
  @inline implicit def any2Echo(x: Any) = new AnyProvidesEcho(x)
}

使用法:

val list = List(1,2,3)
val string = "c'est beacoup mieux mit butter"

list foreach echo
echo(string)
string.echo
于 2012-04-09T18:39:22.410 に答える