在变量中分配函数

时间:2016-06-27 16:55:46

标签: ruby

在Javascript中我们可以这样做

var c = {

    firstname: "Bob",
    lastName: "Smith"
    log: function()
    {
        return "Hey" + this.firstname + " " + this.lastName;
    }

};

我们可以在红宝石中做这样的事吗? I.E“This”的用法在哪里,我们还可以在变量中堆叠函数吗?我是红宝石的新手但是“哈希”的特征似乎在某种意义上非常相似

3 个答案:

答案 0 :(得分:2)

散列项无权访问父散列,因此无法访问散列的嵌套兄弟。你要找的是一堂课。

class MyClass
  def initialize
    @first_name = "Bob"
    @last_name = "Smith"
  end

  def log
    "Hey #{@first_name} #{@last_name}"
  end
end

MyClass.new.log
#⇒ "Hey Bob Smith"

我认为在尝试使用之前阅读一本关于Ruby语法和/或基本概念的书是有意义的。

答案 1 :(得分:-1)

在红宝石中有Proc and Lambda的概念,它是类似的。

示例:

def create_lambda
  lambda { "You're looking at me?" }
end

some_var = create_lambda
some_var.call   #=> "You're looking at me?"

您还可以传递参数:

def create_square
  lambda { |base| base * base }
end

square = create_square
square.call(4) # => 16

但是,请注意,lambda和procs都是可选的参数,你总是必须准确地给出它们你定义的参数。

在您的示例中,哈希在创建之前无法引用。

因此,对于您的示例,您可以这样做:

my_hash = {
  firstname: "Bob",
  lastName: "Smith"
}

my_hash['log'] = lambda { "Hey #{my_hash['firstname']} #{my_hash['lastName']}" }

my_hash['log'].call  #=> "Hey Bob Smith"

答案 2 :(得分:-1)

你可以试试Struct

require 'ostruct'

Person = Struct.new(:firstname, :lastName) do
    def log
        "Hey" + self.firstname + " " + self.lastName
    end
end

person = Person.new('Bob', 'Smith')
puts person.log