2

哪些字符串可以作为 Ruby 的方法名称?我特别想知道非单词字符以何种方式可以成为方法名称的一部分。请给出一套详尽的规则/列表。

编辑 Phrogz 对 Josh Lee 链接的问题的回答有一个指向下一页的链接,但那是几年前的,并且已经过时了。例如,Proc#()缺少。有人知道更新的吗?

在此处输入图像描述

4

3 回答 3

3

根据镐(Programming Ruby,The Pragmatic Programmers):

局部变量、方法参数和方法名称都应以小写字母或下划线开头...在此初始字符之后,名称可以是字母、数字和下划线的任意组合(附带条件是 @ 后面的字符符号可能不是数字)... 方法名称可能以字符 ?、! 和 = 结尾。

于 2012-10-24T14:17:00.857 回答
2

任何 Unicode 字符序列都是有效的方法名称。例如:

class Test
  define_method :'    ???    _    µµµµ . . . ' do puts 'Hello' end
end

Test.instance_methods
# => [:'    ???    _    µµµµ . . . ']

Test.new.send :'    ???    _    µµµµ . . . '
# Hello
于 2012-10-24T22:55:59.770 回答
1

您可以使用 ASCII、UTF-8 和 Unicode 字符作为方法的名称。我想空格 ( \s) 字符不会仅仅因为解析器会抱怨而起作用。只需设置魔法线,让 Ruby 知道会发生什么。

http://www.oreillynet.com/ruby/blog/2007/10/fun_with_unicode_1.htmlhttp://rosettacode.org/wiki/Unicode_variable_names#Rubyhttp://www.sw.it.aoyama.ac。 jp/2009/pub/IUC33-ruby1.9/。Phrogz 在https://stackoverflow.com/a/4379197/128421中有一个很好的正则表达式,它涵盖了 ASCII 字符。

此外,在 Stack Overflow 上,“ Ruby 1.9 如何处理源代码中的字符大小写? ”中对此进行了很好的讨论。由于该问题的年龄,我没有将其标记为重复,但它确实值得参考。

但是,应该问的问题是,非 ASCII 字符是否应该在方法名称中使用?是的,它们很可爱,它们可能具有象征意义,但它们可能会让人很难打字,尤其是对于那些出于某种原因无法输入字符的人。如果它们在 gem 中,创建包含 π 或 λ 的方法名称或常量可能很难输入。

另请注意$KCODE,在几个链接的分页中提到,现在在 Ruby 1.9.1+ 中已弃用,因此您需要使用魔术线。

于 2012-10-24T14:56:48.680 回答