最近Rubyを学び始めて思いついた超くだらないネタです。。既出かは調べていないです。
ruby
def int(n)
end
def main(v, &f)
begin
f.call
rescue LocalJumpError
end
end
void = 0
### C言語のコード
#include <stdio.h>
int main(void) {
printf("hello, world!\n");
return 0;
}
###
ブロックについて学んでいて、(意味は全く異なりますが)ほぼC言語のコードに近いものを書けることに気づいて書いてみた次第です。。
本当はLocalJumpError
の例外処理はゴリ押しせず何かしら別な手段(lambda
にキャストとか?...lambda
だとエラーにならない...みたいな記事を見たのですがエラーになったりしてよくわかりませんでした...)で対処したかったのですが、まぁ面倒だし今回はこれでいいかとあきらめちゃいました(苦笑)
おやじギャグみたいなもんだと思ってくれれば幸いですw
10/26 追記
アドバイスを受けrescue
を使わない形を考えてみました
ruby
lambda {
def int(n)
end
def main(v, &f)
f.call
# rescue LocalJumpError
end
void = 0
### C言語のコード
#include <stdio.h>
int main(void) {
printf("hello, world!\n");
return 0;
}
###
}.call
バージョンが2.4.1
以前だとトップレベルで値を返すことができないみたいでした1ので、lambda {...}.call
で囲んでみました
-
自分の環境は
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-msys]
でした ↩