トップページ⇒tech
1001コメント311KB

Ruby初學者スレッド Part 9

■ このスレッドは過去ログ倉庫に格納されています
0001紅寶石2006/11/21(火) 08:33:42
まずはマニュアル

マニュアル
http://www.ruby-lang.org/ja/man/
Ruby FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
逆引きRuby
http://www.namaraii.com/rubytips/
Ruby リファレンスマニュアルの Windows HTML Help版
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
Rubyリファレンスマニュアル刷新計画
http://doc.loveruby.net/


前スレ
Ruby初心者スレッドPart8
http://pc8.2ch.net/test/read.cgi/tech/1159424939/

>>2-10
0153デフォルトの名無しさん2006/11/28(火) 23:41:05
>>152
再帰。
0154デフォルトの名無しさん2006/11/28(火) 23:49:51
>>152
入門書では見たことないな
その辺のフォローはあってもいいよね
0155デフォルトの名無しさん2006/11/29(水) 01:30:45
チューリングマシンはプログラミング言語ではありません
0156デフォルトの名無しさん2006/11/29(水) 07:30:22
>150
関数定義もサブルーチンからのリターンもできない言語か
ループは大丈夫だとしても、キツいなw
gotoまみれになりそうだ

配列で仮想スタック作って自前で管理すれば
サブルーチンを扱えるかも知れんが
それはそれでどうなんだろうw
0157デフォルトの名無しさん2006/11/29(水) 08:06:16
スタックレスPythonってあったな。あとレジスタマシンを実装するとか。
0158デフォルトの名無しさん2006/11/29(水) 12:09:24
brainf**kとかだな。
0159デフォルトの名無しさん2006/11/29(水) 13:27:26
ルートウィジェットを表示せずにTk.getOpenFileできる方法ってありますか?

require 'tk'
p Tk.getOpenFile

だとルートウィジェットが表示されてしまいます。

Tk.messageBox(:icon=>'warning', :type=>'ok', :message=>"Hello")

の場合は都合よくルートウィジェットは表示されないのですが,
同じようにできないだろうかと思ってます。
0160デフォルトの名無しさん2006/11/29(水) 13:28:39
pythonをフィヨンと読んでいた俺
本当はパイソンらしい。
0161デフォルトの名無しさん2006/11/29(水) 14:33:42
>>159
Tk.root.withdraw
0162デフォルトの名無しさん2006/11/29(水) 15:03:36
>>161
Thanks
0163デフォルトの名無しさん2006/11/29(水) 17:08:46
10年以上前に卒論のプログラムPythonで書いたが、
指導教官はぜんぜん言語名をまともに呼んだことがなかった。
「ぺいとん」とか「ぴてぃおん」とか。

0164デフォルトの名無しさん2006/11/29(水) 17:17:30
どなたか参考になるサイト、TIPSをお教え願います

rubyで、画像に文字列を表示したいのですが(サウンドノベルゲームみたいなものの、メッセージが表示される枠のイメージ)
また、複数音声のファイル(mp3など)を、ランダムで読み込んで再生といったことをしたいのですが

参考になるようなところお願い致します。。。
vrubyのTIP系はどこをあたればよいのかわからず
0165デフォルトの名無しさん2006/11/29(水) 17:55:18
>>164
そういうのは、Ruby/SDLとか、Miyakoとか使うんじゃない?
0166デフォルトの名無しさん2006/11/29(水) 18:29:38
なるほど、そういうものがあったのですね。
プログラムの関係でvrubyだけで実装しようとしております。
vrubyでの実装方法などとかはないでしょうか?
0167デフォルトの名無しさん2006/11/29(水) 19:59:40
>>166
まあ一度、MIyako使ってみろ。
Windowsでもちゃんと動く。
0168デフォルトの名無しさん2006/11/29(水) 20:02:00
>>166
SWin::Windowのメソッドをみろ。
使い方は、vr/をdopaintで検索すれば概ねわかるだろ。

音声関係は、VisualuRubyの守備範囲じゃなかろう。
0169デフォルトの名無しさん2006/11/29(水) 20:28:53
rubygemで

gem environment

とすると、

$RUBYLIB/rubygems/custom_require.rb:35:in `require': No such file to load -- sources (LoadError)

とでてしまいます。

何かヒントでもいいので、ご教授よろしくお願いします。
0170デフォルトの名無しさん2006/11/29(水) 21:01:06
sources gemはある?

ruby/gems/1.8/gems/sources-0.9.0
とか。
01711692006/11/29(水) 21:12:16
>170
ないです。
0172デフォルトの名無しさん2006/11/29(水) 21:23:50
>>171
ちゃんと用意しろ。
0173デフォルトの名無しさん2006/11/29(水) 21:26:36
>>165 >>167-168
ありがとうございました。やれるだけやってみます。

01741692006/11/29(水) 22:04:03
すみません。rubygemのintsll errorでした。
0175デフォルトの名無しさん2006/11/29(水) 23:26:21
>>146
それは本質ではない。
たった1000程度でスタックを食いつぶす実装はイクナイという話。
0176デフォルトの名無しさん2006/11/29(水) 23:41:01
趣味の言語で何いってんだよ
PUSHは男のロマンだぜ
0177デフォルトの名無しさん2006/11/29(水) 23:44:01
ということ
0178デフォルトの名無しさん2006/11/30(木) 00:51:13
>>113
> 直感的には「末尾から数えてmバイト目から左←に向かってnバイト分」だと思うんだが。

それは俺の直感には思いっきり反するんだが、どうしてくれる。
0179デフォルトの名無しさん2006/11/30(木) 07:15:21
Rubyで他の関数に配列引数を渡したいときはどうすればいいですか?
Cだと

int gauss(int A){
hoge
}

int a(){
int C[10][10],i,j;

for(i=0;i<10;i++){
for(j=0;j<10;j++)
C[i][j]=1;
}

gauss(C);
}

で配列Cの中身はそのまま渡されるんですが・・・
0180デフォルトの名無しさん2006/11/30(木) 07:56:52
>>179
Cでは関数に配列を渡すというより
単なるアドレスを渡すという事になると思うんだけど。
#include <stdio.h>
int array_size(int *p)
{
return sizeof(p);
}
int main(void)
{
int a[] = {0,1,2};
printf("%d\n", sizeof(a));
printf("%d\n", array_size(a));
return 0;
}

それにそのコードだとコンパイルエラーでしょ?
0181デフォルトの名無しさん2006/11/30(木) 08:37:12
173ですが
画像に文字を表示させるのは
フレーム型のbitmappanelを下に表示して、文字を出すことでなんとかいけました。
あとは音だけなのですが
ttp://vruby.sourceforge.net/samples.html のマルチメディア再生でいけると踏んでいるのですが
任意のフォルダ以下(sound/○○.mp3)のmp3ファイル(連番)をランダムでENTERを押したときに再生といったことをやろうとしていて
ディレクトリを読み込む段階で倒れてしまいました。。。
ご指導お願い致します。
0182デフォルトの名無しさん2006/11/30(木) 08:52:09
どうやって配列引数渡すのか早く教えろ
0183デフォルトの名無しさん2006/11/30(木) 09:03:48
>>182
ヒント:google
0184デフォルトの名無しさん2006/11/30(木) 09:09:47
>>182
どうして配列が渡せないと思うのか早くコードで示せ
0185デフォルトの名無しさん2006/11/30(木) 09:11:45
配列に対する操作しか乗ってない。
具体的に配列を如何生成するかとか、他の関数に如何渡すのかとか、
添え字はどう参照されるのか基本的なことが何もかかれてない。
これじゃ他言語から新しく覚えたくてもわからん。
0186デフォルトの名無しさん2006/11/30(木) 09:13:12
渡せるコードのサンプルが全然落ちてないから。
0187デフォルトの名無しさん2006/11/30(木) 09:23:36
少なくともCと同じやり方では渡せない。
0188デフォルトの名無しさん2006/11/30(木) 09:41:05
>>185
def print_array(a)
a.each{|v| print v, ' ' }
end

a = [2,3,4,5,6]
print_array(a)
0189デフォルトの名無しさん2006/11/30(木) 09:57:14
添え字の範囲を間違えていた・・・orz
スマソ
0190デフォルトの名無しさん2006/11/30(木) 12:52:22
>>181
Dir.glob
0191デフォルトの名無しさん2006/11/30(木) 13:07:12
>>179
「Cもまったくわかってません。」まで読んだ。
0192デフォルトの名無しさん2006/11/30(木) 13:49:37
勉強のため、rubyでsuffix arrayを作っています。

----
str = "hogehoge"
sarray = Array.new(str.size){ |i| i }.sort_by{ |i| str[i..-1] }
sarray.each{ |i| puts str[i..-1] }
----
e
ehoge
ge
gehoge
hoge
hogehoge
oge
ogehoge
----

これで動作するんですけど、マルチバイトの場合はもちろん失敗します。
マルチバイト対応で何とかならないですかね?
0193デフォルトの名無しさん2006/11/30(木) 19:14:38
>>192 自己解決しました。

----
str = "ほげhogeほげ"

i = 0
sarray = []
while i < str.size
  sarray.push i
  if str[i].chr =~ /[\xA1-\xFE]/ then i += 2
  else i += 1 end
end
sarray = sarray.sort_by{ |i| str[i..-1] }

sarray.each{ |i| puts str[i..-1] }
----
eほげ
geほげ
hogeほげ
ogeほげ
げ
げhogeほげ
ほげ
ほげhogeほげ
----

単純に2バイト文字の場合インデックスを飛ばせば良いんですね。
0194デフォルトの名無しさん2006/11/30(木) 21:19:29
str = "ほげhogeほげ"

$KCODE = "S"
sarray = []
s = str
until s.empty?
  sarray << s
  s = s.sub(/\A./, '')
end
sarray.sort!
puts *sarray
0195デフォルトの名無しさん2006/12/01(金) 10:08:57
すみません教えてください。
class A
 def foo
  処理 A
 end
end
class B < A
 def foo
  super
  処理 B
 end
 def bar
  処理 C
 end
end
hoge = B.new

で、
hoge.barでBではなくてAのfooメソッドを呼びたいのですが
メソッドbarの処理Cは、どのように書けば良いでしょうか。

0196デフォルトの名無しさん2006/12/01(金) 10:31:08
class A
def foo; puts "foo in A"; end
end
class B<A
alias :foo_A :foo
private :foo_A
def foo; super; puts "foo in B"; end
def bar; foo_A; puts "bar in B"; end
end

irb(main):012:0> B.new.bar
foo in A
bar in B
0197デフォルトの名無しさん2006/12/01(金) 10:57:25
def bar
a_foo_unbound = self.class.superclass.instance_method(:foo)
a_foo = a_foo_unbound.bind(self)
a_foo.call
end

もっと簡単に書けるかしら。
01981952006/12/01(金) 10:57:57
>>196
ありがとうございました、できました。

classBでaliasをdef foo〜endの前に記述したのでfoo_Aはオーバーライド前の
classAのfooを示しているという理解でよいでしょうか?
private宣言をする意味が良くわかりません。
01991952006/12/01(金) 11:01:29
>>197
ありがとうございます、動きました。
でも、難しすぎてワケわかりません、精進します。
0200デフォルトの名無しさん2006/12/01(金) 11:06:17
>>199
>>197はinject並だから安心しろ
>>196のほうがなんぼか素直だ
02011952006/12/01(金) 11:13:12
>>200
ありがとうございます。
後々のことも考えて理解できる>>196を使用します。
0202デフォルトの名無しさん2006/12/01(金) 17:26:58
aliasの引数はメソッド名が2つ。構文なので区切りの,は入らない。
alias_methodはシンボル2つ。メソッドなので,で引数を区切る必要あり。

なんで二通りあるんだろう。
0203デフォルトの名無しさん2006/12/01(金) 17:55:19
前者は構文なんだから引数ってのとはちょっとちがう。

二通りある理由は、機能が違うから、としか言いようがないかな。
0204デフォルトの名無しさん2006/12/01(金) 19:07:07
ifのthenとか省略可能なものって省略した方が処理速度速いんですか?
0205デフォルトの名無しさん2006/12/01(金) 19:30:26
>>204
変わりません。
0206デフォルトの名無しさん2006/12/01(金) 21:05:02
>198
その通り。

private にしているのは、意図せず foo_A で外から呼ばれないようにしたいなあという意思表示です。深い意味はありません。

ところで、

class C<B
def foo_A; puts "foo_A in C"; end
end
とすると、

irb(main):006:0> C.new.bar
foo_A in C
bar in B
=> nil

うーん、これはまあ仕方ないが。これ以上頑張るなら>197
02072042006/12/02(土) 02:44:54
>>295
ありがとう
0208デフォルトの名無しさん2006/12/02(土) 03:39:14
ロングパスだ
0209デフォルトの名無しさん2006/12/02(土) 13:54:31
作者著のRubyの本amazonで買った!楽しみだな〜!
0210デフォルトの名無しさん2006/12/02(土) 14:12:30
Rubyの初心者です
timesメソッドの中にif文を入れて,もし条件を満たしていれば
timesメソッドから抜けたいのですが,どうすればいいのでしょうか。
if文の中でbreakしてもtimesメソッドからは抜けられなかったので質問しました
どうかよろしくお願いします
0211デフォルトの名無しさん2006/12/02(土) 14:33:54
>>210
3.times do |n|
  break if n%2 == 1
  puts n #=> 0だけ表示される
end
#=> 全体として nil が返る

一体どんなコード書いたんだ?
0212デフォルトの名無しさん2006/12/02(土) 16:49:13
実はProcess.timesだったとか。
0213デフォルトの名無しさん2006/12/02(土) 19:53:39
csvファイルのレコード数(行数)を簡単に得られるメソッドか方法はありますか?
メージ的にはこんな感じ

csv = CSV.open('file.csv', 'r')
p csv.size ##-> 行数

Arrayにしてから数えるしかないのでしょうか?
0214デフォルトの名無しさん2006/12/02(土) 21:02:29
>>213
csv を扱うライブラリーに"csv.rb"がある
マニュアルは下記、HPで。( rubyのマニュアルにあるHPはリンク切れ)
http://dev.ctor.org/doc/csv/

行数だけなら↓のようになるかな
require "csv"
filename = 'hoge.csv'
i = 0
CSV.open(filename, 'r') do |x| i += 1 ;end
p i
0215デフォルトの名無しさん2006/12/02(土) 21:04:06
それは単にテキストファイルの行数とどう違うの?

nlines = open('file.csv').read.delete("^¥n").size
全部読んで、改行以外を抹殺して改行だけになったら文字数を数える。

つーかsystem("wc")するとか…
0216デフォルトの名無しさん2006/12/02(土) 22:30:15
GNU textutils-2.0.tar.gz の wc.c
----
case '\n':
lines++;
/* Fall through. */
case '\r':
case '\f':
if (linepos > linelength)
linelength = linepos;
linepos = 0;
goto word_separator;
case '\t':
linepos += 8 - (linepos % 8);
goto word_separator;
case ' ':
linepos++;
/* Fall through. */
----
だそうなので、Rubyが自前で\nを数えても wc とやってることは結局いっしょっぽい。
というか、wc だからといって何かすごい小細工があるわけでもない模様。

ファイルを全部メモリに保持するときのメモリの圧迫が気になるなら
ファイルを数百バイトずつ読んで捨てつつ改行だけカウントすれば。
0217デフォルトの名無しさん2006/12/02(土) 22:40:48
地味だね

まあ、ファイルの改行をカウントするためだけに
ファイル開いて全部舐めてカウントして捨てて閉じるというのは
なんとなく無駄というかもったいない感じはしなくもない
0218デフォルトの名無しさん2006/12/02(土) 22:46:06
>>181です >>190さん、ありがとうございました。
すみません。。。ボタンを押すとフォルダの中のファイル(0000.wav〜0009.wav)をランダムに再生するものを作りたいのですが
Dir.globでの操作が上手くいかず。。。お願いします。
下のはとりあえず、1個ずつ読み込んで再生しようと思ったのですが、最後しか再生されません。
VRMediaViewをmmとして、読み込むファイルをfnとして再生させています

def open_clicked
@mm.mediaclose
dirname = "sound/hoge"
Dir.glob("#{dirname}/*.wav").sort.each do |fn|
@mm.mediaopen(fn) if fn
@mm.play
end
end

これをランダムにしたいのですが、どのようにすればよいのか。。。お願い致します
0219デフォルトの名無しさん2006/12/02(土) 22:49:31
>>218
ランダムにしたいというのはどういうことなのか考える
次に、ランダムを表現するためのメソッドとかを探してみる
んで、そのメソッドをどう利用すればランダムに「なる」か考えてみる

即っとコード出しちゃう人もいそうだけど
0220デフォルトの名無しさん2006/12/02(土) 22:56:31
ランダムに選ぶ練習ってしてないのかな?
入門書や解説サイトには必ずある例題だと思うんだけど…

組み込み"関数"の rand を使うと乱数がもらえるぞ
0221デフォルトの名無しさん2006/12/02(土) 23:05:37
randを使うのは了解しているのですが
Dir.globとの組み合わせのところでうまくいかず。。。
それからディレクトリが1個読み込んで再生ではなく、一度に全部読み込んで最後だけ再生となってしまって
色々試行していたのですが、、、助け舟を頂きたく
0222デフォルトの名無しさん2006/12/02(土) 23:13:48
>>221
君が参考にしてる解説本あるいは解説サイト晒せ(w

p で色々調べるといい。
Ruby では、ドットの「前」にあるオブジェクトがどういう状態になってるか常に意識しれ。
具体的に言うと Dir.glob("#{dirname}/*.wav") がどういう風になってるか p で調べてみ。

調べたら、それをランダムに選ぶにはどうしたらいいか考える。
0223デフォルトの名無しさん2006/12/02(土) 23:31:16
ここを基本に見ております
ttp://www.osk.3web.ne.jp/~nyasu/software/vrproject.html

p ですか…すいません。。。仰っている意味が理解できずです
もう一度 print("hello world\n")からやり直してきます。。。
ただ、時間がもうあまり無く、解答だけでもいただけるとありがたいです。
0224デフォルトの名無しさん2006/12/02(土) 23:41:35
時間?
0225デフォルトの名無しさん2006/12/02(土) 23:43:34
時間(笑)
0226デフォルトの名無しさん2006/12/02(土) 23:57:38
list = Dir.glob("#{dirname}/*.wav")
target = list[ (list.size() * rand()).to_i ]
p target
0227デフォルトの名無しさん2006/12/03(日) 00:06:03
ありがとうございますm(_ _)m
ソースのとおり変更したら上手くいきました。

ただこれでは自分の身にならないので、どこのサイトで勉強をすればよいのかお教え願えますでしょうか
自分ではこのソースは書けないので。。。

本当にありがとうございました
0228デフォルトの名無しさん2006/12/03(日) 00:06:13
そこは to_i ではなく truncate と書くべきだと思う
つーか rand(list.size) で用済まないか
0229デフォルトの名無しさん2006/12/03(日) 00:06:54
時間ってw
02302262006/12/03(日) 00:08:24
やはり、使い慣れん言語使うと、しくじるな。>>228 のとおりだ。
0231デフォルトの名無しさん2006/12/03(日) 00:10:26
truncateってto_iとどう違うの?
0232デフォルトの名無しさん2006/12/03(日) 00:15:34
>>231
動作は一緒

英単語上のニュアンスの違いしかないんじゃないかな
「整数にする」と「切り捨てる」の違い

"3.14"を3にしたい場合は"3.14".to_i
3.14を3にしたい場合は3.14.truncate

ただ、こういうくだらないとこに拘る奴が中にいるとプロジェクトは混乱する(w
0233デフォルトの名無しさん2006/12/03(日) 00:18:00
def yomikomi
教えてください。
Ruby/Qteなのですが、

dic = open("/home/zaurus/.anthy/private-dic.src")
dictxteuc = dic.read
dictxtu8 = dictxteuc.kconv(Kconv::UTF8,Kconv::EUC)
@dicedit.setText(dictxtu8)
#$defaultCodec.toUnicode
end

とすると、@diceditとしたQmultiLineEditの中の感じがすべて文字化けしています。
なにがわるいんでしょうか?教えてください。

ちなみに/home/zaurus/.anthy/private-dic.srcの中身は、EUC-JPのハズです。
0234デフォルトの名無しさん2006/12/03(日) 00:29:35
>>226
1.8系だと Dir.glob("#{dirname}/*.wav") はwin環境だとちょっとまずい。
まじでさっさと対応版出して欲しい。
02352332006/12/03(日) 00:36:55
すみません。順番がめちゃくちゃだったので、もう一回書き込みしておきます。

教えてください。
Ruby/Qteなのですが、

def yomikomi
dic = open("/home/zaurus/.anthy/private-dic.src")
dictxteuc = dic.read
dictxtu8 = dictxteuc.kconv(Kconv::UTF8,Kconv::EUC)
@dicedit.setText(dictxtu8)
end

とすると、@diceditとしたQmultiLineEditの中の感じがすべて文字化けしています。
なにがわるいんでしょうか?教えてください。

ちなみに/home/zaurus/.anthy/private-dic.srcの中身は、EUC-JPのハズです。

0236デフォルトの名無しさん2006/12/03(日) 00:42:10
>>235

Qte のことは分からんが、どこが悪いか、まずは、各行の後でデバッグ出力出してみろ
(文字化け避けるため、それぞれ別のファイルに出した方がいいな)
まずは「どこ」が悪いのか特定するんだ。
0237デフォルトの名無しさん2006/12/03(日) 00:58:31
>>234
どうまずいの?
02382352006/12/03(日) 01:04:37
それが、エラーは出したようではないのですよ。
出力された物はは確かに思った出力ではないのですけどね。
0239デフォルトの名無しさん2006/12/03(日) 01:19:19
どこで習うべきなんだろうね、こういうの

def errlog(text,name)
File.open("/home/zaurus/rubyerror-#{name}.txt",'w'){|f|
f.write(text)
}
end

def yomikomi
dic = open("/home/zaurus/.anthy/private-dic.src")
dictxteuc = dic.read
errlog(dictxteuc,'euc') # 確認用出力
dictxtu8 = dictxteuc.kconv(Kconv::UTF8,Kconv::EUC)
errlog(dictxtu8,'utf8') # 確認用出力
@dicedit.setText(dictxtu8)
end

こうしてみろってことだろ、要は。
rubyerror-euc.txtがちゃんとEUC-JPかどうか、
rubyerror-utf8.txtがちゃんとUTF8かどうか確かめろってことかね
0240デフォルトの名無しさん2006/12/03(日) 01:26:28
別にエラーメッセージを出せと言ってるわけじゃない。

dic = open("/home/zaurus/.anthy/private-dic.src")
open("1.txt","w").print dic
dictxteuc = dic.read
open("2.txt","w").print dictxteuc
dictxtu8 = dictxteuc.kconv(Kconv::UTF8,Kconv::EUC)
open("3.txt","w").print dictxtu8

まぁ、デバッガとか使えば、もっと楽なんだろうがな。
02412402006/12/03(日) 01:27:12
くそ、かぶった。はずかし
0242デフォルトの名無しさん2006/12/03(日) 01:31:16
>>240は面白い書き方してるな
仮に出力してる感がわかりやすくていい
02432352006/12/03(日) 01:36:22
>236, >239

ほんとにありがとうございます。
ちなみに、ファイルは正確に変換されていたようです。
とすれば、最後の方の@dicedit.setText(dictxtu8)と
送られた先のQmultiLineEditのあたりがあやしそうですね。

ちなみに、これが初めてのプログラムなので習うというよりも、
習熟度がきわめて低いのが発想力のなさの一因なのでしょうねorz
0244デフォルトの名無しさん2006/12/03(日) 01:39:40
>>243

悩め、苦しめ、ジタバタしろ。
それが貴様の血となり肉となる。
orz する必要は全くない。
0245デフォルトの名無しさん2006/12/03(日) 01:46:53
>>243

QTe のことは分からんが、そのソースで理論上うまくゆく「はず」
ということであれば、環境変数とか設定ファイルとか、
初期化ルーチンあたりで設定するパラメータとかの値が悪いんでないかい?
(そんなもんがあるとしたらの話だが)
0246デフォルトの名無しさん2006/12/03(日) 01:48:35
>244
ありがと。もう少しがんばってみるよ。

QmultiLineEditクラスは、マルチバイト扱ってくれんのかなぁ。
0247デフォルトの名無しさん2006/12/03(日) 01:52:47
「QTe 文字化け」でぐぐると何か書いてたりしないかね
0248デフォルトの名無しさん2006/12/03(日) 01:58:14
>247
それやってみます。m(. .)m
0249デフォルトの名無しさん2006/12/03(日) 02:25:39
>>237
sjisのbyte目が []{} なんかと被ると誤動作する。
02502352006/12/03(日) 02:26:13
解決。

@dicedit.setText(tr(dictxtu8))
~~~
翻訳(translate)しなきゃだめだよね。
これ、一回こうなおしたと思ったのに・・・・
みんなありがと。とりあえず寝ます。
0251デフォルトの名無しさん2006/12/03(日) 12:11:20
しつもーん。
nil.to_s が "" を返すということは積極的に使っていいもんですか?

「キー hoge がハッシュ h に登録されてないか登録されてても値が空("")のとき true」を

 h['hoge'] == nil or h['hoge'].empty?

ではなく

 h['hoge'].to_s.empty?

と書くのは邪悪?
0252デフォルトの名無しさん2006/12/03(日) 12:28:06
devでnil.to_s = "nil" になるという話が出たり引っ込んだりしてたので
やめといたほうがいい。あれは結局引っ込んだのかな。引っ込んだとしても
またいつ復活するか分からんしなー。

railsの構成要素である active_support の blank? を使う方がいいかもしれない。
nil, 0, "", [] などに対して真を返す。
■ このスレッドは過去ログ倉庫に格納されています