kmizushimaのプロフィール

@kmizushima kmizushima
ありがとう数2
質問数0
回答数2
ベストアンサー数
2
ベストアンサー率
100%
お礼率
0%

  • 登録日2010/05/08
  • rubyでScalaのようにコールバックを変数として定義するには?

    rubyでScalaのようにコールバックを変数として定義するには? 最近Scalaの勉強を始めました。自分の一番好きな言語はrubyなので、比較しながら勉強してます。 参考書によると、関数をオブジェクトとして扱えるのがScalaの特徴との説明がありました。例えば、以下のような例なのですが、(行頭スペースは全角) class Kuku(a:Int,b:Int){  def calc(func:(Int,Int)=>String):String={   return func(a,b)+a*b  } } val f1=(a:Int,b:Int)=>a+"*"+b+"=" println(new Kuku(3,5).calc(f1)) これをrubyで書くと、(行頭スペースは全角) class Kuku  def initialize(x,y)   @x=x   @y=y  end  def calc   yield(@x,@y)+(@x*@y).to_s  end end puts Kuku.new(3,5).calc{|a,b| a.to_s+'*'+b.to_s+'='} とまでは書けたのですが、コールバック(ブロックパラメータの部分)、上記例だと |a,b| a.to_s+'*'+b.to_s+'=' の部分 を変数として定義(Scalaの例のf1として定義するところ)する方法を知りません。 このように関数を変数として定義する事ってrubyではできないと考えるのですが、そういった認識で間違いないでしょうか? ご指導の程、よろしくお願いいたします。

  • scalaで無限に続く関数を返したい

    scalaで無限に続く関数を返したい scalaという物を知って現在弄り始めた初心者です。 例えばschemeでなら (define f (lambda () (define n (lambda (x) (display x) (display "\n") (lambda () (n (+ x 1))))) (n 0))) (((f))) こんな感じの事がしてみたいですが、これをそのまま下の様に書き換えたところ、コンパイルに失敗しました。 def f()={ def n(x:Int) = { println(x) () => n(x+1) } n(0) } def main(arg:Array[String])={ f()()() } これだと、コンパイラにnが何返すか分からんと怒られてしまいます。単純に返す物が分かっているときは :(()=>Int)= などと書いたら出来たのですが、今回は永遠に終わらないので書き方が分かりません。 どの様に返値を指定すればいいのでしょうか?