我想知道如何从模块中访问类变量
module Entity
def foo
# puts @@rules
end
end
class Person
include Entity
attr_accessor :id, :name
@@rules = [[:id, :int, :not_null],
[:name, :string, :not_null]]
end
class Car
include Entity
attr_accessor :id, :year
@@rules = [[:id, :string, :not_null],
[:year:, :int, :not_null]]
end
p = Person.new
c = Car.new
p.foo # [[:id, :int, :not_null], [:name, :string, :not_null]]
c.foo # [[:id, :string, :not_null], [:year, :int, :not_null]]
Run Code Online (Sandbox Code Playgroud)
我看了看cattr_accessor,并mattr_accessor从ActiveSupport,但仍无法找到一个方法来解决这个问题.
有这个基本文件:
{
"_id": "userID",
"name": "User Name",
"profiles": [
{
"level": 1,
"bar": {
"_id": "bar1ID",
"name": "Bar Name"
}
},
{
"level": 1,
"bar": {
"_id": "bar2ID",
"name": "Bar 2 Name"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我需要删除一些字段,并重新分配bar字段,以便它只包含_id:
{
"_id": "userID",
"profiles": [
{
"level": 1,
"bar": "bar1ID"
},
{
"level": 1,
"bar": "bar2ID"
}
]
}
Run Code Online (Sandbox Code Playgroud)
与UserID匹配,并使用mongo聚合框架
正如标题所说,我正在用Python编写控制台菜单生成器.我有2个课程,菜单和项目.但是我遇到了麻烦.这是代码:
class Menu:
def AddItem(self,item):
class Item:
def __init__(self,text,ToDoNext):
self.text=text
??????????????
self.item.append(Item())
def Show():
for i in range(len(self.item)):
print(str(i+1)+") "+str(self.item[i])+"\n")
print("0) Back\n")
option=int(input())
self.item[option].????????????
Run Code Online (Sandbox Code Playgroud)
这段代码基本上是下一步:
Main=Menu()
Menu.AddItem("Open file",ToDo1)
Menu.AddItem("Save file",ToDo2)
Menu.Show()
'''1) Open file
2) Save file
0) Back
_
'''
Run Code Online (Sandbox Code Playgroud)
如果我写1并按Enter键应该执行代码部分ToDo1,例如.我认为的解决方案是下一个:
def ToDo1():
print("Hello, world!")
Menu.AddItem("Say Hello","ToDo1()")
Run Code Online (Sandbox Code Playgroud)
并使用eval()内部的功能Show().
但我不确定这不是正确的方法.
我希望你能告诉我一个更好的方法,如果你曾经做过类似的事情(控制台菜单生成器)来共享代码并看到另一种方法.
我意识到我无法运行教程(http://sequel.jeremyevans.net/)两次.
第一次,它按照我们的预期运行.但第二次,它引发了一个错误
SQLite3::SQLException: table `items` already exists (Sequel::DatabaseError)
Run Code Online (Sandbox Code Playgroud)
我理解错误,但我不知道如何解决它.
如何在不丢失其包含的数据的情况下打开数据库,并且仍然能够运行教程?
由于Ruby不支持重载(由于几个微不足道的原因),我试图找到一种"模拟"它的方法.
在静态类型语言中,您不得使用instanceof(当然除了某些特定情况......)来指导应用程序.
因此,记住这一点,这是重载一个方法的正确方法,在这个方法中我关心变量的类型吗?(在这种情况下,我不关心参数的数量)
class User
attr_reader :name, :car
end
class Car
attr_reader :id, :model
end
class UserComposite
attr_accessor :users
# f could be a name, or a car id
def filter(f)
if (f.class == Car)
filter_by_car(f)
else
filter_by_name(f)
end
end
private
def filter_by_name(name)
# filtering by name...
end
def filter_by_car(car)
# filtering by car id...
end
end
Run Code Online (Sandbox Code Playgroud)