特訓結果
今日も今日とて特訓です。
記号シリーズが一段落し、変数と定数シリーズを動かしてみています。
スコープの辺りの機能はjavaと変わらないので、「あ、これがあれね」という感じですが、publicとかprivateとかを@とか@@とかで表現するってのが新鮮。
以下コードとか実行例晒しです。
まあ誰の役にも立たないと思いますが、絵で言えば30秒ドローイングみたいなもんですかね。
例によってirbで叩いて確認しています。
何度も同じ名前でクラスとかメソッド作ってると怒れられるんですね。
それにしてもirbさまさま。
http://www.ruby-lang.org/ja/man/html/_CAD1BFF4A4C8C4EABFF4.html#a.c4.ea.bf.f4 irb(main):106:0* a = 10 => 10 irb(main):107:0> irb(main):108:0* p "a is #{a}" "a is 10" => "a is 10" irb(main):109:0> irb(main):110:0* irb(main):111:0* p((true and false)) false => false irb(main):112:0> irb(main):113:0* puts `ruby -h` Usage: ruby [switches] [--] [programfile] [arguments] -0[octal] specify record separator (\0, if no argument) -a autosplit mode with -n or -p (splits $_ into $F) -c check syntax only -Cdirectory cd to directory, before executing your script -d set debugging flags (set $DEBUG to true) -e 'command' one line of script. Several -e's allowed. Omit [programfile] -Eex[:in] specify the default external and internal character encodings -Fpattern split() pattern for autosplit (-a) -i[extension] edit ARGV files in place (make backup if extension supplied) -Idirectory specify $LOAD_PATH directory (may be used more than once) -l enable line ending processing -n assume 'while gets(); ... end' loop around your script -p assume loop like -n but print line also like sed -rlibrary require the library, before executing your script -s enable some switch parsing for switches after script name -S look for the script using PATH environment variable -T[level] turn on tainting checks -v print version number, then turn on verbose mode -w turn warnings on for your script -W[level] set warning level; 0=silence, 1=medium, 2=verbose (default for level) -x[directory] strip off text before #!ruby line and perhaps cd to directory --copyright print the copyright --version print the version => nil irb(main):114:0> irb(main):115:0* irb(main):116:0* irb(main):117:0* irb(main):118:0* 2.times{ irb(main):119:1* p defined?(v) irb(main):120:1> v=1 irb(main):121:1> p v irb(main):122:1> } nil 1 nil 1 => 2 irb(main):123:0> irb(main):124:0* 4.times{ irb(main):125:1* v = 1 irb(main):126:1> p v irb(main):127:1> v ++ irb(main):128:1* } SyntaxError: (irb):128: syntax error, unexpected '}' from C:/Ruby19/bin/irb:12:in `<main>' irb(main):129:0> irb(main):130:0* irb(main):131:0* 4.times{ irb(main):132:1* v=1 irb(main):133:1> p v irb(main):134:1> v++; irb(main):135:1* } SyntaxError: (irb):134: syntax error, unexpected ';' from C:/Ruby19/bin/irb:12:in `<main>' irb(main):136:0> irb(main):137:0* 4.times{ irb(main):138:1* v=1 irb(main):139:1> p v irb(main):140:1> } 1 1 1 1 => 4 irb(main):141:0> irb(main):142:0* n=10 => 10 irb(main):143:0> n.times{ irb(main):144:1* p n irb(main):145:1> } 10 10 10 10 10 10 10 10 10 10 => 10 irb(main):146:0> irb(main):147:0* irb(main):148:0* class Foo irb(main):149:1> def initialize irb(main):150:2> @a = 1 irb(main):151:2> end irb(main):152:1> def a irb(main):153:2> @a irb(main):154:2> end irb(main):155:1> def b irb(main):156:2> @b irb(main):157:2> end irb(main):158:1> end => nil irb(main):159:0> irb(main):160:0* class Baa < Foo irb(main):161:1> def baa_a irb(main):162:2> @a irb(main):163:2> end irb(main):164:1> end => nil irb(main):165:0> irb(main):166:0* p Foo.new.a 1 => 1 irb(main):167:0> irb(main):168:0* p Foo.new.b nil => nil irb(main):169:0> irb(main):170:0* p Baa.new.baa_a 1 => 1 irb(main):171:0> irb(main):172:0* irb(main):173:0* class Foo irb(main):174:1> @a=1 irb(main):175:1> def self.a irb(main):176:2> @a irb(main):177:2> end irb(main):178:1> end => nil irb(main):179:0> irb(main):180:0* class Baa < Foo irb(main):181:1> end => nil irb(main):182:0> irb(main):183:0* p Foo.a 1 => 1 irb(main):184:0> irb(main):185:0* p Baa.a nil => nil irb(main):186:0> irb(main):187:0* irb(main):188:0* irb(main):189:0* class Foo irb(main):190:1> @@foo = 1 irb(main):191:1> def bar irb(main):192:2> puts @@foo irb(main):193:2> end irb(main):194:1> end => nil irb(main):195:0> irb(main):196:0* irb(main):197:0* Foo.new.bar 1 => nil irb(main):198:0> irb(main):199:0* class Foo irb(main):200:1> @@foo = 1 irb(main):201:1> end => 1 irb(main):202:0> irb(main):203:0* class Bar < Foo irb(main):204:1> p @@foo += 1 irb(main):205:1> end 2 => 2 irb(main):206:0> irb(main):207:0* class Baz < Bar irb(main):208:1> p @@foo += 1 irb(main):209:1> end 3 => 3 irb(main):210:0> irb(main):211:0* module Foo irb(main):212:1> @@foo = 1 irb(main):213:1> end TypeError: Foo is not a module from (irb):211 from C:/Ruby19/bin/irb:12:in `<main>' irb(main):214:0> irb(main):215:0* irb(main):216:0* module Fox irb(main):217:1> @fox = 1 irb(main):218:1> end => 1 irb(main):219:0> irb(main):220:0* class Bar irb(main):221:1> include Fox irb(main):222:1> p @@fox += 1 irb(main):223:1> end NameError: uninitialized class variable @@fox in Bar from (irb):222:in `<class:Bar>' from (irb):220 from C:/Ruby19/bin/irb:12:in `<main>' irb(main):224:0> irb(main):225:0* irb(main):226:0* module Fox irb(main):227:1> @@fox = 1 irb(main):228:1> end => 1 irb(main):229:0> irb(main):230:0* class Bar irb(main):231:1> include Fox irb(main):232:1> p @@fox += 1 irb(main):233:1> end 2 => 2 irb(main):234:0> irb(main):235:0* class Baz irb(main):236:1> include Foo irb(main):237:1> p @@foo += 1 irb(main):238:1> end TypeError: wrong argument type Class (expected Module) from (irb):236:in `include' from (irb):236:in `<class:Baz>' from (irb):235 from C:/Ruby19/bin/irb:12:in `<main>' irb(main):239:0> irb(main):240:0* class Baz irb(main):241:1> include Fox irb(main):242:1> p @@fox += 1 irb(main):243:1> end 3 => 3 irb(main):244:0> irb(main):245:0* irb(main):246:0* irb(main):247:0* $foobar = 222 => 222 irb(main):248:0> irb(main):249:0* class FooBar irb(main):250:1> def ppp irb(main):251:2> p $foobar irb(main):252:2> end irb(main):253:1> end => nil irb(main):254:0> irb(main):255:0* FooBar.new.ppp 222 => 222 irb(main):256:0> irb(main):257:0* irb(main):258:0* p __FILE__ "(irb)" => "(irb)" irb(main):259:0> irb(main):260:0* p __LINE__ 260 => 260 irb(main):261:0> irb(main):262:0* class Foo irb(main):263:1> FOO = 'FOO' irb(main):264:1> end (irb):263: warning: already initialized constant FOO => "FOO" irb(main):265:0> irb(main):266:0* irb(main):267:0* irb(main):268:0* class C irb(main):269:1> end => nil irb(main):270:0> irb(main):271:0* p C C => C irb(main):272:0> irb(main):273:0* module M irb(main):274:1> I = 35 irb(main):275:1> class C irb(main):276:2> end irb(main):277:1> end => nil irb(main):278:0> irb(main):279:0* p M::I 35 => 35 irb(main):280:0> irb(main):281:0* p M::C M::C => M::C irb(main):282:0> irb(main):283:0* p ::M M => M irb(main):284:0> irb(main):285:0* M::NewConst = 777 => 777 irb(main):286:0> irb(main):287:0*