只是想知道为什么
def move world_switch(@pos_X += 1, @pos_X -= 1, @pos_Y += 1, @pos_Y -= 1) end def world_switch(do_on_north, do_on_south, do_on_east, do_on_west) case @facing # => 'NORTH' when 'NORTH' puts do_on_north # => 1 do_on_north when 'SOUTH' do_on_south when 'EAST' do_on_east when 'WEST' do_on_west end end
调用world\u开关:
robot = Robot.new(0, 0, 'NORTH') robot.move puts robot.instance_variable_get("@pos_X") #=> 0
结果没有任何变化,我想增加或减少实例变量@pos\u X或@pos\u Y
这是我的初始化方法
def initialize(pos_X, pos_Y, facing) @pos_X, @pos_Y, @facing = pos_X, pos_Y, facing end
这就是我如何创建类的实例机器人=Robot.new(0,0,'NORTH')
我们将不胜感激
添加到Chowlett和mikej的答案中(这很好地解释了为什么您的代码不工作)。你可以试试这样:
class Player
def initialize(position)
@position = position
end
def move(direction)
case direction
when :north
@position[:x] += 1
when :south
@position[:x] -= 1
when :east
@position[:y] -= 1
when :west
@position[:y] += 1
end
end
end
player = Player.new({:x => 0, :y => 0})
player.move(:north)
puts player.inspect
# => "#<Player:0x16c7ef8 @position={:x=>1, :y=>0}>"
由于您调用world\u开关的方式,它什么都不做。Ruby将在调用之前评估作为参数传递的每个表达式。
所以,你用(比如说)、@pos_X
和@pos_Y
都等于0来调用移动。Ruby确实:
@pos_X += 1 # => @pos_X = 1; param 1 will be 1
@pos_X -= 1 # => @pos_X = 0; param 2 will be 0
@pos_Y += 1 # => @pos_Y = 1; param 3 will be 1
@pos_Y -= 1 # => @pos_Y = 0; param 4 will be 0
world_switch(1, 0, 1, 0)
然后,world_switch根据面向的方式进行切换,并简单地返回相应参数的值。它根本不会更改实例变量。
我不确定我是否解释清楚了。如果你需要澄清,请告诉我。
当前行为的解释如Chowlett所描述的那样,但是您是否打算让中的
@pos_X=1、@pos_X-=1
etc成为代码块,然后根据机器人面向的方式从world_switch
调用其中的一个?
如果是这样,移动需要这样声明
def move
world_switch(Proc.new { @pos_X += 1 }, Proc.new { @pos_X -= 1 },
Proc.new { @pos_Y += 1 }, Proc.new { @pos_Y -= 1 })
end
然后在world\u switch中,您可以执行以下操作
case @facing # => 'NORTH'
when 'NORTH'
do_on_north.call
when 'SOUTH'
do_on_south.call
...
主要内容:语法,实例,从方法返回值,实例,Ruby return 语句,语法,实例,实例,可变数量的参数,实例,类方法,Ruby alias 语句,实例,Ruby undef 语句Ruby 方法与其他编程语言中的函数类似。Ruby 方法用于捆绑一个或多个重复的语句到一个单元中。 方法名应以小写字母开头。如果您以大写字母作为方法名的开头,Ruby 可能会把它当作常量,从而导致不正确地解析调用。 方法应在调用之前定义,否则 Ruby 会产生未定义的方法调用异常。 语法 def method_name
主要内容:CGI 实例化方法,HTML 生成方法,实例,CGI 对象属性以下为CGI类的方法列表: 序号 方法描述 1 CGI::new([ level="query"]) 创建 CGI 对象。query可以是以下值: query: 没有 HTML 生成输出 html3: HTML3.2 html4: HTML4.0 Strict html4Tr: HTML4.0 Transitional html4Fr: HTML4.0 Frameset 2 CGI::escape
本文向大家介绍Ruby Gems更换淘宝源方法,包括了Ruby Gems更换淘宝源方法的使用技巧和注意事项,需要的朋友参考一下 最近由于要做课设,所以昨天装了个 Windows,感觉闲的没事干,就想装个 Ruby 玩玩。 官方的 Rubygems 源由于有些资源放在 Amazon S3 上面,所以有时会抽风,在 Linux 下我用 proxychains gem install xxx 实现了指定
《 笨方法學 Ruby 》(Learn Ruby The Hard Way)是 Zed Shaw 編寫的一本Ruby 入門書籍。適合對電腦了解不多,沒有學過寫程式,但對寫程式感興趣的朋友學習使用。
Ruby 提供了一种组织代码并重用的功能,它可以让我们无需创建冗长的 Ruby 代码,在需要它们的时候才会使用它们。对于方法,您只需要学会方法的声明、调用以及传参即可。在本章中会为您详细介绍方法的使用。 1. 声明和调用Ruby方法 在 Ruby 中,我们使用def来声明定义方法,def后面接加方法名,end作为方法的结尾。另外,我们使用方法名()的形式来调用方法,在大多数情况下,我们还可以省略这
问题内容: 我正在构建加速移动页面(AMP)模板,并且想知道是否有一种简便的方法可以切换选项卡上的CSS类。 我知道类似的东西: 但这写的是内联样式-我宁愿切换自定义CSS类,但在AMP页面上找不到示例。 与绑定看起来像是要走的路,但是使用它们给您的工具来操纵状态非常困难… 问题答案: 这可以通过完成。您可以使用隐式状态变量(例如)来跟踪当前状态。这是切换两个类和的示例: