作用域
Ruby中不具备嵌套作用域(即在内部作用域,可以看到外部作用域的)的特点,它的作用域是截然分开的,一旦进入一个新的作用域,原先的绑定会被替换为一组新的绑定。
程序会在三个地方关闭前一个作用域,同时打开一个新的作用域,它们是:
- 类定义class
- 模块定义 module
- 方法定义 def
上面三个关键字,每个关键字对应一个作用域门(进入),相应的end则对应离开这道门。
扁平化作用域
从一个作用域进入另一个作用域的时候,局部变量会立即失效,为了让局部变量持续有效,可以通过规避关键字的方式,使用方法调用来代替作用域门,让一个作用域看到另一个作用域里的变量,从而达到目的。具体做法是,通过Class.new替代class,Module#define_method代替def,Module.new代替module。这种做法称为扁平作用域,表示两个作用域挤压到一起。
示例代码(Wrong)
my_var = “Success” class MyClass puts my_var #这里无法正确打印”Success” def my_method puts my_var #这里无法正确打印”Success” end end
示例代码(Right)
my_var = “Success” MyClass = Class.new do puts “#{my_var} in the class definition” define_method :my_method do “#{my_var} in the method” end end
在一些语言中,比如java或C#,有内部作用域(inner scope)的概念。在内部作用域可以看到外部作用域(outer scope)中的变量。但ruby中没有这种嵌套式作用域的概念,它的作用域是截然分开的,一旦进入一个新的作用域,原先的绑定就会被替代为一组新的绑定。
在ruby中,程序会在三个地方关闭前一个作用域,同时打开一个新的作用域:类定义、模块定义、方法。
只要程序进入类、模块或者方法的定义,就会发生作用域切换。这三个边界分别用class,module和def关键字作为标志,每一个关键字都充当了一个作用域门(scope gate)。
怎样让绑定穿越一个作用域门呢?比如下面的代码:
my_var = “hello” class MyClass #你希望在这里能打印my_var def my_method #...还有这里 end end
在进入另一个作用域时,局部变量会立刻失效。如果把class关键字替换为某个非作用域门的东西,比如方法,就能在一个闭包中获得my_var的值,并把这个闭包传递给该方法。代码如下:
my_var = “hello” MyClass = Class.new do puts “#{my_var} in the class definition” def my_method #...这里怎样打印出来呢? end end
用Module#define_method()方法可以替代def,代码如下:
my_var = “hello” MyClass = Class.new do puts “#{my_var} in the class definition” define_method :my_method do puts “#{my_var} in the method” end end MyClass.new.my_method
hello in the class definition hello in the method
共享作用域
将一组方法定义到,某个变量的扁平作用域中,可以保证变量仅被有限的几个方法所共享。这种方式称为共享作用域。
Ruby,作用域,面向对象
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- DzintraErliha-Dreamscape(2024)[24Bit-96kHz]FLAC
- 群星.1999-上华世纪国语总冠军4CD【上华】【WAV+CUE】
- 叶丽仪.1992-仙鹤神针电视剧原声音乐专辑【星传真】【WAV+CUE】
- 陈柏宇.2011-QUINQUENNIUM【SONY】【WAV+CUE】
- 《51首热门当红歌曲 十大顶级发烧女声 3CD》[WAV+CUE][1.6GB]
- 《赵传 深受摇滚迷青睐的台湾音乐人 约定》[WAV+CUE][320MB]
- 《庄心妍 实力唱将 发烧音乐精选集》[WAV+CUE][380MB]
- [音展纪念碟]2006年《TAA台湾第十六届国际HI-ENDHI-FI音响展》2cd[WAV]
- 中国音乐地图之听见西藏山歌牧歌酒歌2020[WAV分轨]
- 王宏伟2017-永远的红飘带[太平洋影音][WAV+CUE]
- 费翔.1997-NOW现在【第一中国】【WAV+CUE】
- 新格合唱团.1981-我唱你和2辑(滚石新格民歌系列)【新格】【WAV+CUE】
- 陈柏宇.2011-QUINQUENNIUM【SONY】【WAV+CUE】
- 雨果唱片-《金唛系列-蔷薇依韵琼瑶》WAV
- 陈百强《凝望(2012华纳LPCD45限量版)[DMI]》[WAV整轨]