课程,他们的方法,他们的变量等对我来说是一个非常新的概念,也是我难以完全掌握的东西。
我正在教自己Ruby,这个话题令人沮丧,所以我决定以不同的方式看待事物。
我意识到我从第一天起就一直在使用类,实例变量和实例方法。
示例
** String - class
“我的名字是......” - String类的实例。
.length - 我可以在上面的实例上调用的String类的实例方法。
"Hi my name is....".length => 17
我可以创建
x = String.new("Hi")
但我也可以创建
x = "Hi"
两者都是相同的
如果我创建了猫类
class Cat
attr_reader :name
def initialize(name)
@name = name
end
end
jinx = Cat.new("Jinx")
print jinx.name => Jinx
我们有
猫级
“Jinx” - Cat类的实例。
.name - Cat类的实例方法。
两个问题
这是查看课程的好方法吗?当我遇到更大的问题,比如创建一个有多个课程的tic tac toe游戏(我现在正在做的)时,我觉得有时会感到头疼。这令人沮丧,因为我感到愚蠢(也许我应该习惯),但我在这里打败自己。我有一个非常容易的时间进行代码大战并用单一方法解决大量问题。我知道某个地方,如果我能把它与课程联系起来,我会更好地理解。在坚持自学的最佳方式时,是否正在寻找解决方案代码?我没有人要问,我希望保留尽可能多的信息。
第二,Ruby如何知道String是一个String,一个Array是一个数组,一个Hash a Hash所以我可以定义那些变量而不是调用.new就像我对Cat一样?它只是语法“”用于字符串,[]用于数组,{}用于哈希所以它假定我们正在谈论的是什么?
答案 0 :(得分:7)
您正在寻找的概念是Literals,但为了更详细地解释它,让我们从您的示例代码开始。
此代码中实际上有两个不同的字符串:
x = String.new("Hi")
"Hi"
是一个字符串对象,然后创建一个第二个字符串对象并存储在x
中。使用此等效代码可以更好地看到这一点:
y = "Hi"
x = String.new(y)
x
和y
变量包含两个不同的字符串对象,即使两个对象包含相同的内容。您可以通过修改其中一个来检查它们是不同的,并检查另一个是否保持不变
y.downcase!
y #=> "hi"
x #=> "Hi"
考虑此代码:
jinx = Cat.new("Jinx")
如果您说"Jinx"
是Cat
,那就不太对了。 "Jinx"
仍然是一个字符串。 Cat.new
将创建一个新的Cat
对象,它会将"Jinx"
字符串存储在对象中。
你可以更清楚地看到这种差异:
# this is a string
name = "Jinx"
name.length #=> 4
# this is a Cat, with a string inside it
jinx = Cat.new(name)
jinx.name #=> "Jinx"
jinx.name.length => 4
两者之间的区别在于Ruby有字符串文字但不是 Cat文字。
文字是一个对象,您可以在其中键入代码,而无需使用new
实际创建它。以下是一些文字的例子:
"Hello"
生成String
对象5
制作Integer
对象5.5
生成Float
对象[]
制作Array
对象{}
生成Hash
对象您可以在此处查看完整的Ruby文字列表:https://ruby-doc.org/core-2.3.0/doc/syntax/literals_rdoc.html
Cat
个对象没有文字,因为它是您自己创建的自定义类。我不能只输入类似<Jinx>
的内容来创建Cat
对象,因为Ruby不会理解 - 我必须使用Cat.new
创建它。
答案 1 :(得分:1)
不要因此而殴打自己。我知道这感觉压倒一切。它发生了。当你自学并且没有其他人知道它可以帮助你时,它会发生更多。编程很棘手,只是野兽的本质。
我不认识Ruby,但是关于编程的好处是只有大约15%的人知道语言和编码的大量思考过程(以及更多的调试)所以我不需要在这里帮助你它根据您声明的语法或“......”,[]和{}