生活资讯
Ruby From Other Languages
2025-01-03 00:20  浏览:81

This document contains two major sections. The first attempts to be a rapid-fire summary of what you can expect to see when going from language X to Ruby. The second section tackles the major language features and how they might compare to what you’re already familiar with.

  • To Ruby From C and C++
  • To Ruby From Java
  • To Ruby From Perl
  • To Ruby From PHP
  • To Ruby From Python

Here are some pointers and hints on major Ruby features you’ll see while learning Ruby.

Two Ruby features that are a bit unlike what you may have seen before, and which take some getting used to, are “blocks” and iterators. Instead of looping over an index (like with C, C++, or pre-1.5 Java), or looping over a list (like Perl’s , or Python’s ), with Ruby you’ll very often instead see

For more info on (and its friends , , , , etc.), see (and then ).

There’s no difference between an expression and a statement. Everything has a value, even if that value is . This is possible:

Many Ruby newbies struggle with understanding what Symbols are, and what they can be used for.

Symbols can best be described as identities. A symbol is all about who it is, not what it is. Fire up and see the difference:

The methods returns the identity of an Object. If two objects have the same , they are the same (point to the same Object in memory).

As you can see, once you have used a Symbol once, any Symbol with the same characters references the same Object in memory. For any given two Symbols that represent the same characters, the s match.

Now take a look at the String (“george”). The s don’t match. That means they’re referencing two different objects in memory. Whenever you use a new String, Ruby allocates memory for it.

If you’re in doubt whether to use a Symbol or a String, consider what’s more important: the identity of an object (i.e. a Hash key), or the contents (in the example above, “george”).

“Everything is an object” isn’t just hyperbole. Even classes and integers are objects, and you can do the same things with them as with any other object:

Constants are not really constant. If you modify an already initialized constant, it will trigger a warning, but not halt your program. That isn’t to say you should redefine constants, though.

Ruby enforces some naming conventions. If an identifier starts with a capital letter, it is a constant. If it starts with a dollar sign (), it is a global variable. If it starts with , it is an instance variable. If it starts with , it is a class variable.

Method names, however, are allowed to start with capital letters. This can lead to confusion, as the example below shows:

Now is 10, but is 11.

Like in Python, since Ruby 2.0 methods can be defined using keyword arguments:

In Ruby, everything except and is considered true. In C, Python and many other languages, 0 and possibly other values, such as empty lists, are considered false. Take a look at the following Python code (the example applies to other languages, too):

This will print “0 is false”. The equivalent Ruby:

Prints “0 is true”.

In the following Ruby code,

You might expect to be public. Not so. The access modifier continues until the end of the scope, or until another access modifier pops up, whichever comes first. By default, methods are public:

, and are really methods, so they can take parameters. If you pass a Symbol to one of them, that method’s visibility is altered.

In Java, means a method is accessible by anyone. means the class’s instances, instances of descendant classes, and instances of classes in the same package can access it, but not anyone else, and means nobody besides the class’s instances can access the method.

Ruby differs slightly. is, naturally, public. means the method(s) are accessible only when they can be called without an explicit receiver. only is allowed to be the receiver of a private method call.

is the one to be on the lookout for. A protected method can be called from a class or descendant class instances, but also with another instance as its receiver. Here is an example (adapted from The Ruby Language FAQ):

Ruby classes are open. You can open them up, add to them, and change them at any time. Even core classes, like or even , the parent of all objects. Ruby on Rails defines a bunch of methods for dealing with time on . Watch:

In Ruby, methods are allowed to end with question marks or exclamation marks. By convention, methods that answer questions end in question marks (e.g. , which returns if the receiver is empty). Potentially “dangerous” methods by convention end with exclamation marks (e.g. methods that modify or the arguments, , etc.). Not all methods that change their arguments end with exclamation marks, though. replaces the contents of an array with the contents of another array. It doesn’t make much sense to have a method like that that doesn’t modify self.

Singleton methods are per-object methods. They are only available on the Object you defined it on.

Ruby doesn’t give up if it can’t find a method that responds to a particular message. It calls the method with the name of the method it couldn’t find and the arguments. By default, raises a NameError exception, but you can redefine it to better fit your application, and many libraries do. Here is an example:

The code above just prints the details of the call, but you are free to handle the message in any way that is appropriate.

A method call is really a message to another object:

Blocks (closures, really) are heavily used by the standard library. To call a block, you can either use , or make it a by appending a special argument to the argument list, like so:

You can create blocks outside of method calls, too, by calling with a block or calling the method.

Similarly, methods are also Objects in the making:

Most operators in Ruby are just syntactic sugar (with some precedence rules) for method calls. You can, for example, override Integer’s method:

You don’t need C++’s , etc.

You can even have array-style access if you define the and methods. To define the unary + and - (think +1 and -2), you must define the and methods, respectively. The operators below are not syntactic sugar, though. They are not methods, and cannot be redefined:

In addition, , etc. are just abbreviations for , , etc. and therefore cannot be redefined.

    以上就是本篇文章【Ruby From Other Languages】的全部内容了,欢迎阅览 ! 文章地址:http://sjzytwl.xhstdz.com/xwnews/957.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 物流园资讯移动站 http://sjzytwl.xhstdz.com/mobile/ , 查看更多   
最新文章
SQL数据清洗:利用SUBSTRING和CHARINDEX处理无效字符
截取字符串 我们在做BI可视化之前,通常需要已经清洗干净的数据才能进行可视化分析。 随着电商的发展,有很多数据都
Python数据分析与展示
快讯:这是本课程第20次开课~~本课程是国家精品在线开放课程“Python网络爬虫与数据分析”的下半部分,欢迎大家加入学习!“我们
MacOS升级ruby版本
1. 历史与起源Bourne Shell (sh) ,即 Bourne Shell,是由 Stephen Bourne 在 1977 年开发的。它是最早的 UNIX Shel
SHOPYY:今天不聊亚马逊,我们只谈独立站
说到跨境电商平台,大部分人跟我一样,最先想到的就是亚马逊、eBay、速卖通、Wish这四大目前主流的平台。跨境电商卖家们借助平台
上外Blackboard在线建课问答第十二期(Q&A)
SISU上外Blackboard在线建课问答第十二期(QA)教师的个人课程列表中有一门《在线课程建设培训》,可自主学习相关资料。课程列表
uniapp开发H5拉起微信支付全流程(含H5获取用户code、openid方法)
这两天遇到一个需求就是开发微信公众号H5界面,需要点击支付按钮拉起微信进行支付。我自己觉得H5和小程序的支付流程还是有
一个月内三刷PB,吴艳妮发声
  澎湃新闻记者 祁东  仅用两周时间,吴艳妮又一次刷新自己的个人最好成绩(PB)。  吴艳妮一个月内三刷个人最好成绩。资
“用C语言实现计算功能”中,对比AI的程序,我的收获
最近写了一个用C语言实现计算功能的程序,已上传。运行截图:然后让文心一言也写了个程序:它只能计算例如3&#
【VS插件】学习笔记|AutoHistory:自动保存你的代码历史文件
你是不是曾经希望自己可以回滚一段你有修改过的工程的代码? 比如说,自己编写的一个程序原本是正常运行的、计算结
相关文章