在Javascript中我们可以这样做
var c = {
firstname: "Bob",
lastName: "Smith"
log: function()
{
return "Hey" + this.firstname + " " + this.lastName;
}
};
我们可以在红宝石中做这样的事吗? I.E“This”的用法在哪里,我们还可以在变量中堆叠函数吗?我是红宝石的新手但是“哈希”的特征似乎在某种意义上非常相似
答案 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