これは、ルビインラインの「ホーム」であるhttp://www.zenspider.com/ZSS/Products/RubyInline/Readme.htmlからコピーされ、コメントに示されているように追加/変更されます。
require 'rubygems' #added this, doesn't run otherwise
require 'inline'
class MyTest
def factorial(n)
f = 1
n.downto(2) { |x| f *= x }
f
end
inline do |builder|
builder.c "
long factorial_c(int max) {
int i=max, result=1;
while (i >= 2) { result *= i--; }
return result;
}"
end
end
#t = MyTest.new() # removed this
#factorial_5 = t.factorial(5) # removed this
asdf = MyTest.new # added this
puts "ruby native factorial: " + asdf.factorial(16).to_s # added this
puts "inline factorial: " + asdf.factorial_c(16).to_s # added this
私がそれを実行すると、私は得ます
ルビーtestfact.rb
ルビーネイティブ階乗:20922789888000
インライン階乗:2004189184
ルビーのバージョンは正しいです。インラインバージョンが何であるかわかりません(正しくないことを除いて)。
私はruby1.8.7(2008-08-11パッチレベル72)[i486-linux]を実行しています。私は次のようにrubyinlineをインストールしました:sudo gem install RubyInline
Cコードで「int」を「long」に変更してみましたが、違いはありませんでした。(まだ明らかでない場合は、私はCプログラマーではありません。)
最後に、引数として12以下で両方を実行すると、どちらも同じ答えが得られることに気付きました。13歳以上では物事がおかしくなります。
TIA