我是该语言的新手,我需要知道为了使用Ruby编程语言创建功能齐全的网站或Web应用程序,必须知道的最重要的事情是什么?
Ruby on Rails主要使用Rake和其他主要使用Rake的工具。
更新:我知道许多其他语言,如C ++,Java,PHP,Perl等等....
更新2:这很棒......让他们来吧!
答案 0 :(得分:12)
一切(false
和nil
除外)在布尔上下文中评估为true
。
这与空构造或0
经常评估为false
的其他语言不同。
if 0
puts "0 evaluates to true"
end
答案 1 :(得分:11)
一切都是对象。一切。
答案 2 :(得分:8)
方法隐式返回最后一个语句的结果。
def foo
"bar"
end
puts foo # outputs "bar"
答案 3 :(得分:7)
return
来更明确地显示它。for
循环。symbols
代替字符串,因为它们是有效的,例如在哈希键中等。
答案 4 :(得分:7)
字符串是可变的;符号不是。
答案 5 :(得分:5)
Ruby使用消息传递,而不是函数调用。
例如,
# These are all the same:
5 + 3
5.+(3)
5.send(:+, 3)
答案 6 :(得分:4)
机架。所有现代Ruby Web服务器和框架都使用Rack协议。虽然您可以在不了解Rack的情况下制作Ruby Web应用程序,但它将为您提供良好的基础,并且它在Ruby Web社区中变得越来越重要。
Rack也可以成为学习使用Ruby编写Web应用程序的良好起点,因为您可以从最简单的Web应用程序开始:
run lambda { |env| [200, {}, "hello world"] }
你可以从那里继续建设。在了解Rack之后,Sinatra,Rails等中的架构决策更有意义。
答案 7 :(得分:3)
几乎所有东西都是一个返回值的表达式。这包括您通常不会将其视为表达式的内容,例如类定义 - 类定义将计算其内部的最后一个表达式。同样,if
和case
是与任何分支中的最后一个表达式计算相同结果的表达式。
他们评估的确切内容如果并非总是显而易见的话:def
求值为nil,但define_method
求值为Proc,代表它定义的方法。这与以下事实相结合:类定义是一种表达方式,有时令人惊讶:
class A
define_method(:foo) {"hello"}
end
# => #<Proc:0x0001d718@(irb):18> # NOT nil
class A
define_method(:bar) {"hello"}
FAVORITE_NUMBER = 80
end
# => 80
答案 8 :(得分:2)
如果调用Ruby不知道的方法,Ruby将调用method_missing并附上详细信息。
class MyClass
def method_missing(method_name, *args)
puts "Method #{method_name} called with arguments #{args.join(', ')}"
end
end
my_instance = MyClass.new
my_instance.undefined_method(4, :blah) # => Method undefined_method called with arguments 4, blah
答案 9 :(得分:2)
v 1.9与v 1.8非常不同。为1.8构建的代码 NOT 保证在1.9中工作,反之亦然。
我有一大堆代码在v 1.8中工作但在1.9版本中没有,然后不得不处理两台机器,每台机器上都有不同的版本。不好玩。
确保选择一个版本(可能是最新版本,但要警惕网上博客中的大量示例代码是1.87,编程Ruby的第二版也是如此。自那时起已发布a third edition of Programming Ruby涵盖1.9,这就是你想要的那个。
另外,如果你像我一样,你会在编程时唱三首歌中的一首:
答案 10 :(得分:1)
irb,pp,lp&amp; ap是非常有用的魔术词! ;)
答案 11 :(得分:1)
不要滥用猴子补丁。 Ruby使它变得简单,但它可能会受到伤害。
答案 12 :(得分:1)
值得全面阅读: -
Top 5 New Features in Ruby 1.9
4.The Lambda Operator
5.RubyGems和Rake与Ruby合并
答案 13 :(得分:1)
ruby-debug是你的朋友。我可能比任何其他宝石都使用它更多。鉴于ruby的动态特性,通过查看编辑器中的文本很难确切知道特定代码片段的作用。只需在它前面放一个“调试器”并进入它。
这也是了解动态生成方法的来源的好方法。
答案 14 :(得分:0)
你不能像在C ++中那样重载operator=
。你也无法以任何有意义的方式模拟它。
答案 15 :(得分:0)
我认为人们已经涵盖了大部分基础知识。这是一些高级的东西:
inherited
,included
,class_eval
,instance_eval
和:
@a = "something"
class << @a
def moo
puts "moo"
end
end
@a.moo
@b = "something else"
@b.moo
eval
是邪恶的。永远不要使用它,除非你真的,真的,真的知道你在做什么。
答案 16 :(得分:-2)
如果您真的知道如何编程,那么您已经了解了有关Ruby编程语言的最重要的事情。跟着他们。
其余的是手册堆栈;读他们。
答案 17 :(得分:-11)