Rails参数binding概念讲解

开发 开发工具
我们在应用Rails参数binding时,会返回一个叫做Binding对象的实例,我们可以使用Rails参数binding返回绑定的值。

Ruby on Rails开发框架被我们用来实现简单的代码编写。在Ruby中,有许多参数值得我们去深入探讨。比如本文介绍Rails参数binding的相关内容。#t#

eval方法有一个可选的参数--binding,如果为指定的话,那么表达式的值就会是一个具体的范围或上下文环境绑定。不过不必为这个有所意外,Rails参数binding会返回一个Binding对象的实例,可以使用binding方法返回绑定的值。下是是ruby文档中提供的一个示例:

  1. def getBinding(str)   
  2. return binding()   
  3. end   
  4. str = "hello"   
  5. puts( eval( "str + ' Fred'" ) ) 
    #=
    > "hello Fred"   
  6. puts( eval( "str + ' Fred'", 
    getBinding("bye") ) ) #=
    > "bye Fred"   
  7. def getBinding(str) return binding() 
    end 
    str = "hello" puts( eval( "str + ' 
    Fred'" ) ) #=
    > "hello Fred" puts
    ( eval( "str + ' Fred'", getBinding
    ("bye") ) ) #=
    > "bye Fred"  

 

Rails参数binding是内核的一个私有方法。getBinding方法通过调用binding方法返回当前上下文环境中str的值。在***次调用 eval方 法的时候,当前上下文环境是main对象,并且str的值就是定义的局部变量str的值。

在第二次调用eval方法是,当前的上下文环境则是 getBinding方法内部,局部变量str的值现在则为getBinding方法中参数str的值。Binding方法经常作为eval的第二个参 数,这样eval就不会因为找不到变量而出错了。

上下文环境也可以在类中定义。在下面的例子中,可以看到,实例变量@mystr和类变量@@x根据类而不同:

  1. class MyClass   
  2. @@x = " x"   
  3. def initialize(s)   
  4. @mystr = s   
  5. end   
  6. def getBinding   
  7. return binding()   
  8. end   
  9. end   
  10. class MyOtherClass   
  11. @@x = " y"   
  12. def initialize(s)   
  13. @mystr = s   
  14. end   
  15. def getBinding   
  16. return binding()   
  17. end   
  18. end   
  19. @mystr = self.inspect   
  20. @@x = " some other value"   
  21. ob1 = MyClass.new("ob1 string")   
  22. ob2 = MyClass.new("ob2 string")   
  23. ob3 = MyOtherClass.new("ob3 string")   
  24. puts(eval("@mystr << @@x", 
    ob1.getBinding)) #=
    > ob1 string x   
  25. puts(eval("@mystr << @@x", 
    ob2.getBinding)) #=
    > ob2 string x   
  26. puts(eval("@mystr << @@x", 
    ob3.getBinding)) #=
    > ob3 string y   
  27. puts(eval("@mystr << @@x", 
    binding)) #=
    > main some other value  

Rails参数binding的概念就为大家介绍到这里了。

责任编辑:曹凯 来源: 博客园
相关推荐

2010-02-03 17:42:33

C++模板参数

2009-12-14 15:30:43

安装Ruby on R

2009-12-16 17:37:31

Ruby on Rai

2009-12-16 15:41:10

Ruby on Rai

2009-12-16 16:24:00

Ruby on Rai

2009-12-17 16:16:24

Rails方法send

2009-12-17 15:42:25

Rails自定义Hel

2009-12-16 16:44:31

Ruby on Rai

2009-10-23 18:47:35

GNULinux

2010-07-02 10:04:36

2010-06-03 18:32:51

Hadoop

2011-07-21 15:28:30

java

2012-02-15 13:19:04

JavaJava Socket

2015-08-11 09:41:58

AndroiddataBinding

2009-10-27 16:47:58

linux vi编辑器

2009-10-27 09:26:26

linux系统监控命令

2013-01-10 16:12:02

Ruby on Rai漏洞

2010-06-10 14:56:18

UML建模语言

2010-08-25 17:05:41

DHCP服务器

2010-02-04 10:08:00

C++静态成员函数
点赞
收藏

51CTO技术栈公众号