Để được rõ ràng - mã này đang chạy một cách hoàn hảo - code with prockhi gọi instance_eval (& lambda) để vượt qua bối cảnh hiện nay đã nhận lỗi 'sai số lập luận'
nhưng nếu thay vào đó tôi thay đổi Proc.new để lambda, tôi gặp lỗi
ArgumentError: wrong number of arguments (1 for 0)
Có thể điều này là do instance_eval muốn chuyển cho mình như một tham số và lambda coi như một phương thức và không chấp nhận thông số không xác định?
Có hai ví dụ - lần đầu tiên được làm việc:
class Rule
def get_rule
Proc.new { puts name }
end
end
class Person
attr_accessor :name
def init_rule
@name = "ruby"
instance_eval(&Rule.new.get_rule)
end
end
thứ hai không phải là:
class Rule
def get_rule
lambda { puts name }
end
end
class Person
attr_accessor :name
def init_rule
@name = "ruby"
instance_eval(&Rule.new.get_rule)
end
end
Cảm ơn
Không phải là 'p.get_rule' thay vì 'p.init_rule'? – artificis