我在一个屏幕上看到了这一点,我只是想知道"="符号在这个例子中的作用.

def express_token=(token)
...
end

如果是这样,我会理解的-

def express_token(token = nil) 

上述(第二个代码段)意味着将nil设置为tokens参数的默认值.然而,在第一段代码中,"="在括号外.

推荐答案

该代码段定义了一个Virtual Attribute(或"setter"方法),因此"express_token"看起来像一个属性,尽管它只是该方法的名称.例如:

class Foo
  def foo=(x)
    puts "OK: x=#{x}"
  end
end
f = Foo.new
f.foo = 123 # => 123
# OK: x=123

请注意,对象"f"没有名为"foo"的属性或实例变量(也不需要),因此"foo="方法只是一种语法糖,用于允许类似于赋值的方法调用.还要注意,这种setter方法always返回它们的参数,而不管任何return语句或最终值.

例如,如果在"irb"中定义顶级setter方法,那么由于向对象类隐式添加了方法,因此该行为可能会有点混乱.例如:

def bar=(y)
  puts "OK: y=#{y}"
end
bar = 123 # => 123, sets the variable "bar".
bar # => 123
Object.new.bar = 123 # => 123, calls our method
# OK: y=123
Object.public_methods.grep /bar/ # => ["bar="]

Ruby相关问答推荐

Ruby;人;docs-使用\";?

在 clojure 中,如何将已排序整数数组划分为连续的分区?

在 ruby​​ 中提取文档中的主题标签和部分

Ruby open-uri 重定向被禁止

为什么 slurping文件不是一个好习惯?

如何在 ruby​​ 中列出当前范围内的当前可用对象?

如何在Ruby中从字符串中go 除前导和尾随引号

在 gem 中放置/访问配置文件的位置?

我可以在 Ruby 中使用默认值创建一个数组吗?

查明 IP 是否在 IP 范围内

在 Ruby 中创建数字、字符串、数组或哈希的 md5 哈希

rspec 是否有比 target.should < 6 更具体的东西?

从命令行调用 ruby​​ 函数

ActiveSupport::Memoizable 指的是哪种 Ruby memoize 模式?

有条件的数组的第一个元素

如何按字母顺序对字符串字符进行排序?

如何在 jekyll markdown 博客中包含视频

在 Jekyll 中使用 Live Reload

=== 与 == 在 Ruby 中

严格将字符串转换为整数(或 nil)