什么是以" ="结尾的ruby方法?意思?

时间:2015-05-03 23:20:04

标签: ruby

以" ="结尾的ruby方法是什么?意思?

请参阅此打印输出中的可用方法:

         <div class="form-group">
        <button class="btn btn-default" name="checkAvail">Check Availability</button>
        <label for="emailAddress" class="col-sm-5 control-label">Email:</label>
        <div class="col-sm-4">
            <input type="email" class="form-control" id="emailAddress" name="emailAddress" placeholder="Email" autocomplete="off">
        </div>
    </div>

例如,label =和label?

之间的区别是什么?

4 个答案:

答案 0 :(得分:9)

foo=与任何其他方法没有什么不同,除了:

  • 它只需要一个参数和
  • Ruby允许您在=字符之前添加空格。

class Foo
  def foo=(other)
    puts 'hi'
  end
end
Foo.new.foo                 = 7
hi

class Goo
  def goo=
    puts 'hi'
  end
end
Goo.new.goo=

Ruby说,“我在等待争论......”。所以我们提供一个:

4

然后她抱怨她要求你做什么:

#=> ArgumentError: wrong number of arguments (1 for 0)

=方法通常用于为实例变量创建setter(如果未使用attr_acccessorattr_writer):

class Foo
  def initialize(foo)
    @foo=foo
  end
  # getter
  def foo
    @foo
  end
  # setter
  def foo=(other)
    @foo = other
  end
end

f = Foo.new('dog')
f.foo
  #=> "dog" 
f.foo = 'cat'
  #=> "cat" 
f.foo
  #=> "cat" 

答案 1 :(得分:3)

以&#34; =&#34;结尾的方法正在设置实例变量

在这里查看答案:why-use-rubys-attr-accessor-attr-reader-and-attr-writer

答案 2 :(得分:2)

它相当于其他语言中的setter方法,它只是惯例,所以看起来更自然

obj.description="Fun Site" 

VS

obj.setDescription("Fun Site")

答案 3 :(得分:1)

=

结尾的方法没有什么特别之处

您可以通过运行以下代码来看到这一点:

def bob=
   puts "bob="
end

p send('bob='.to_sym)

特殊的是'='中缀运算符。当你写self.bob = "bill"时。它被解释为self.send('bob='.to_sym, "bill")

在方法的末尾加上?是一个提示,它返回一个布尔值(true / false)。以!结尾的方法提示该方法影响实例。请参阅String#chomp vs String#chomp。

您可以在http://www.tutorialspoint.com/ruby/ruby_operators.htm了解有关ruby运算符的更多信息,并详细了解https://github.com/bbatsov/ruby-style-guide#naming

处的命名约定