If you absolutely have to do this kind of thing, Shapeless can make it both cleaner and safer: import shapeless._ def findByType[T](xs: Seq[Any])(implicit t: Typeable[T]) = xs.flatMap(t.cast).headOption Note that unlike your implementation, this one won't give wrong answers on many of the standard library's generic types: scala> findByType[List[String]](Seq(List(1), List("a"), 'foo)) res3: Option[
Scala Native¶ Version: 0.4.16 Scala Native is an optimizing ahead-of-time compiler and lightweight managed runtime designed specifically for Scala. It features: Low-level primitives. type Vec = CStruct3[Double, Double, Double] val vec = stackalloc[Vec]() // allocate c struct on stack vec._1 = 10.0 // initialize fields vec._2 = 20.0 vec._3 = 30.0 length(vec) // pass by reference Pointers, structs,
初めまして。菅野と申します。 去年10月に入社し、広告運用ツールを開発するチームに所属しています。 私は普段の開発ではPlayとTypeScriptを使用しています。 PlayやTypeScriptにはそれほど不満は感じていないのですが、その他のツールやライブラリについても気になっているものがいろいろとあります。 特にAkka HTTP 2.0とScala.jsが気になっていて、それらを試すためにToDoアプリのようなものを作ってみました。 今回はその過程を紹介したいと思います。 Akka HTTP Akka HTTPとはAkkaを使用したHTTPサーバライブラリです。 Akka Streamsを使って実装されているため、処理はリアクティブでback-pressureにも対応できるのが特徴です。 libraryDependencies += "com.typesafe.akka" %% "
scalaでのいろいろな多相の実装方法とそのpimp my library pattern版をいろいろ書いて比較してみたいと思います。 オーバーロード これも一応多相と言うらしい。 // オーバーロードによる多相 class John class Taro def greet(john: John) { println("My name is John!") } def greet(taro: Taro) { println("太郎です") } val john = new John() greet(john) val taro = new Taro() greet(taro) 継承 一般的にはこれをポリモーフィズムと呼ぶことが多いと思います。 // 継承による多相 trait Greeter { def greet() } class John extends Greeter { def
iOS では Swift での開発が本格化して関数型っぽい言語による開発が世間一般に浸透し始めた2015年ですが、Android 開発といえばクソみたいなのは相変わらずで Java6 でもうね。という感じですがいかがお過ごしでしょうか。 そんななか本日は Android を Scala で開発する方法をまとめた話。年末だしね。Kotlin じゃないよ。ごめんね。 Android を Java ではなく Scala で書く理由 Android は未だに Java7 (実質 Java6) なので、「え〜、Java6〜! Java6 が許されるのは2013までだよね〜」と言われる。 のは冗談としても、iOS 開発では Swift への移行が少しづつ進んで世のエンジニアが「関数型〜」とか「Stream〜」とかいう感じになっているなか、ジャバ6というのは技術的トレンドを追う側面でちょっとつらい。 そ
DIを使わない状態ではUserRepositoryというインターフェースが定義されているのにもかかわらず、UserServiceはUserRepositoryImplの参照も持っていました。 これではせっかくインターフェースを分離した意味がありません。 UserServiceがUserRepositoryインターフェースだけを参照(依存)するようにすれば、具体的な実装であるUserRepositoryImplの変更に影響されることはありません。 この問題を解決するのがDIの目的です。 それではDIのインジェクタを加えて、上記のクラス図を修正しましょう。 謎のインジェクタの登場によりUserServiceからUserRepositoryImplへの参照がなくなりました。 おそらくインジェクタは何らかの手段でサービスであるUserRepositoryImpl(Dependency)をクライアン
json4sでせらさんが頑張ってくれるらしいけど、どこにも(たぶん英語でも)まとまった知見ないはずなので、とりあえずscalazの知見をもとに、まとめておく 最新開発版のbranchをつくってそちらをメインにしておく それ以外のやり方もありえる(scala本体)が、たぶん開発版(バイナリ互換維持しないほう)をメインにしておいたほうがよい。 具体的には、json4s 3.3ブランチがバイナリ互換維持するなら、3.4か4.0ブランチを作っておく scalazだったら、これ書いてる現在 series/7.2.x が開発用 series7.1.x がバイナリ互換維持しつつメンテする用 上記のbranch戦略をREADMEか何かに書いておき、pull reqは基本的には開発branchのみで受け付ける(両方で無造作に受け付けるとややこしくなるので) 万が一、間違って互換維持するほうのbranchで、
はじめに 人によって様々な書き方ができてしまうのがScala。 本記事では、階乗を求めるfac関数を例に、いくつかの興味深いプログラミングスタイルを紹介します。 以下のコードは、REPLで:pasteすることで、簡単に動作を確認できます。 手続きプログラミング 破壊的操作をためらわない男らしいプログラミングスタイル。 def fac(n: Int) = { var result = 1 for (i <- 1 to n) { result *= i } result } 再帰で書くより速い(はず)です。 普通の再帰 初学者泣かせの再帰スタイル。 def fac(n: Int): Int = if (n == 0) 1 else n * fac(n - 1) // 再帰呼び出しの外側に * による演算がある このように書くとスタックをどんどん消費するので、後述する末尾再帰を使ったほうがいいで
2022-06-25 IT Development 1892 Southern Street, New York 09:00AM-07:00PM Register Target audience: Marketing, advertising and PR specialists of development companies, product and project managers responsible for developing and bringing new services and information systems to market.Entrepreneurs who create promising it services and programs.Marketing managers of companies that have considered or a
追記 間違っていないことを示していただけました → 「Scalaに存在演算子を求めるのは間違っているだろうか」の解答例 - scalaとか・・・ さらにLensでも → 「Scalaに存在演算子を求めるのは間違っているだろうか」をLens/Prismで解いてみる - 独学大学情報学部 (間違っていないけど、そういう抽象化が適切とは言っていない) 精進せねば・・(´・_・`) 追記終わり。 あなたはそこにいますか CoffeeScriptには存在演算子?. があります。 これは、JSONのようなネストした構造で、かつ値が途中でnullになってるかもしれないけど一番内側の値が欲しい! ときに便利な仕組みです。 コードとしては obj = { e : { d : { c: { b: { a: { value: 1 } } } } } } # 存在演算子を使ってvalueにアクセス! obj?.e
2015-07-08 Scalaでハードウェアを書く Scalaでハードウェアを書けるChiselについて紹介します。 Chisel: Constructing Hardware in an Scala Embedded Language Chisel 2.2.0 Manual Chiselとは Chiselとはハードウェア記述用のためのライブラリでありScalaのDSLとして実装されています。最近巷で話題のRISC-Vというアーキテクチャがありますが、その実装であるRocket CoreがChiselで記述されています。Chiselは単なるScalaのライブラリなので、.scalaなファイルの中でimportして使います。そして回路の仕様をScalaで記述してコンパイルするとその仕様に従ったVerilogを出力する実行ファイルが出来ます。以下のコードはChiselのトップページから引用し
Scalaをどうやって学ぶのがいいのか?ということはScalaを使い始めた数年前からずっと考えています。よく「Scalaは難しい」と言われますが、 どこが難しいのか? なぜ難しいのか? ということを、これまで書籍や雑誌記事、ハンズオンなど入門用のコンテンツを作ってきた経験を踏まえて整理してみました。 まず、Scalaが難しいといわれる理由のひとつに学ばなくてはならないものが多すぎるという点があげられます。Scalaはオブジェクト指向言語ですが、関数型言語の特徴的な機能を取り入れているため、きちんと理解するには両方の言語のイディオムを学ぶ必要があるためです。 ただ、Scala自体は必ずしも関数型言語の知識がなくても使えるように設計されています。最初はBetter Javaとして一般的な手続き型オブジェクト指向言語の延長として使い始めることができ、Scalaの特徴的な機能に触れていくことで少し
twitter.com Scalaのはなし。 はじめての関数型言語 Common Lisp(Lispを関数型言語と呼ぶのかはおいておく) Beating the Averages ハッカーと画家 コンピュータ時代の創造者たち 作者: ポールグレアム,Paul Graham,川合史朗出版社/メーカー: オーム社発売日: 2005/01メディア: 単行本購入: 109人 クリック: 4,884回この商品を含むブログ (583件) を見る Lispを使っていたから素早く開発できた 素早さこそが競合に対する最大の武器だった d.hatena.ne.jp Lispだから成功できた Lispをやればお金持ちになれるに違いない(若気の至り) 読みまくった ANSI Common Lisp (スタンダードテキスト) 作者: ポールグレアム,Paul Graham,久野雅樹,須賀哲夫出版社/メーカー: ピア
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く