- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我想知道在 Ruby 中是否可以在声明之前使用变量和方法。 JavaScript 中有类似提升的东西吗?
def calcArea
getWidth * getHeight
end
def getWidth
@w
end
def getHeight
@h
end
@w = 10
@h = 20
p calcArea
最佳答案
I am wondering if variables and methods can be used before declaration in Ruby.
变量不需要在 Ruby 中声明,所以这部分问题没有意义。变量在第一次被赋值时就存在了,或者,对于局部变量,当它们的第一次赋值被解析时。
方法是定义的,而不是声明的。方法定义是一段代码,就像任何其他代码段一样。需要执行才能生效。您不能调用不存在的方法,方法只有在其定义执行后才存在。
Is there something like hoisting in JavaScript?
没有。
def calcArea
getWidth * getHeight
end
def getWidth
@w
end
def getHeight
@h
end
@w = 10
@h = 20
p calcArea
这很好用,但与提升无关。您只需在定义 calcArea
之后调用它,这样就完全没问题了。 calcArea
调用 getWidth
和 getHeight
,但只有当 calcArea
本身被调用时,这在 all 方法已经定义,所以没关系。 getWidth
和 getHeight
访问 @w
和 @h
,但同样,在 getWidth
和 getHeight
被调用,@w
和 @h
已经被赋值,所以也可以。 (即使它们没有被分配,访问它们仍然不是一个错误,访问一个不存在的实例变量只是评估为nil
;显然,你会尝试在 nil
上调用 *
时得到一个 NoMethodError
,但这与为非 nil 得到一个 NameError
有很大不同-存在变量。)
关于编码风格的一些注意事项:
snake_case
。get
前缀。calcArea
基本上是该区域的 setter/getter ,因此它的命名也应不带前缀。因此,根据 Ruby 社区风格,您的代码应该如下所示:
def area
width * height
end
def width
@width
end
def height
@height
end
@width = 10
@height = 20
p area
如果这是模块或类定义的一部分,那么您可以使用 attr_reader
自动生成 getter,并使用 attr_writer
生成 setter:
class Rectangle
attr_reader :width, :height
def area
width * height
end
private
attr_writer :width, :height
def initialize(width, height)
self.width, self.height = width, height
end
end
rect = Rectangle.new(10, 20)
p rect.area
关于ruby - 在 Ruby 中有类似 JavaScript 提升的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42247676/
这个fn是吗: function isplainobj ( obj ) { return Object.prototype.toString.call( obj ) === "[object
我尝试创建一个我没有经验的小 bash 脚本。我尝试做类似的事情: #!/bin/bash statut="na" if [ $proc = 0 ]; then statut = "close
我想重写 HighLine 的几个方法来自定义我的控制台,目前我的代码如下所示: cmd = ask("#{@prompt_label} #{@prompt_separator} ",
鉴于下面的 HTML,我尝试使用 jQuery 来匹配所有具有类“foo”的跨度的列表项,并且该跨度应包含文本“relevant”。 Some text relevant Some more
我拥有一个 5 美元 20GB SSD Digital Ocean Droplet,它几乎用完了 Docker 镜像和容器的空间。 有没有办法购买一个卷,将其连接到服务器并安全地将所有 Docker
我有这样的表: id name number result stuff stuff stuff stuff 我只想将 class = "red" 添加到
我需要计算两点之间的距离,但不是以常规方式。我需要知道“东西距离”+“南北距离”。我想这比常规的“乌鸦飞翔”计算更简单,但我仍然不知道如何做到这一点。 我想使用 MySQL 查询来执行此操作,并且最好
#include #include #include typedef struct dict_pair { void *key; void *value; struct dict_p
为什么当我尝试通过 将 char[] word 写入控制台时会发生这种奇怪的事情 Console.WriteLine(word); 我得到了一个正确的结果,但是当我写的时候 Console.Write
一个简单的例子: class C{} class B{ @Inject C c; void doSomething(){ System.out.println(c);
我想做某事,但不确定如何描述它。我有这门课 public class Company { private List _persons; private Person GetPersonByNa
我正在尝试实现我自己的 qDebug()样式调试输出流,这基本上是我目前所拥有的: struct debug { #if defined(DEBUG) template std::os
所以我正在为我的应用程序编写一个搜索功能,代码如下: - (void) selectObject: (NSString *)notes{ [axKnotes removeAllObjects]
我想在 Rust 中匹配一种复杂的继承式东西: struct Entity { pub kind: EntityKind, } pub enum EntityKind { Player
我是 SQL 新手。这没有返回任何结果...... SELECT media.id as mediaid, media.title as mediatitle, media.description
在微型 SDCard 上写入 Android things 图像并将该卡插入 Raspberry Pi 3 Model B 并打开电源,启动时显示“Auto config Please wait”然后
这是一个常见的但是文本出现在框的右侧,不是极右但几乎是这样 h3: ................................................ .................
#include #include #include #include #include int main(int argc, string argv[]) { if(argc >
所以我试图让一些东西相互堆叠。首先,查看工作链接会有所帮助,您会看到问题所在: http://brownbox.net.au/clients/matchlessphotography/ 现在我需要使用
我想在禁用 javascript 时在我的网站顶部显示一条消息(就像在 SO 上一样),但在谷歌浏览器上不起作用 最佳答案 看起来是这样。 您可以使用 javascript 隐藏“noscript”消
我是一名优秀的程序员,十分优秀!