特訓結果


今日も今日とて特訓です。
記号シリーズが一段落し、変数と定数シリーズを動かしてみています。
スコープの辺りの機能は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*